在python django中列出超出范围的索引

问题描述

我在 django 中使用 python 创建了一个书籍推荐应用程序,所以我试图应用机器学习的 k 均值算法,但是当我运行它时,我在 /log_in/ 列表索引超出范围时出现 IndexError “在最后一行代码中”,这是代码

  # Save session as cookie to login the user
        login(request,user)
      # get request user reviewed books
        user_reviews = BxBookratings.objects.filter(id=request.user.id)
        user_reviews_books_ids = set(map(lambda x: x.isbn,user_reviews))     
     #create matrix
        all_user_names = map(lambda x: x.username,BxUsers.objects.only("username"))
        all_books_ids = set(map(lambda x: x.books_id,BxBooks.objects.only("books_id")))
        num_users = len(list(all_user_names))

        ratings_m = dok_matrix((num_users,max(all_books_ids)+1),dtype=np.float32)
        all_user_names1= list(all_user_names)
       
        for i in all_user_names: # each user corresponds to a row,in the order of all_user_names
    
            user_reviews = BxUsers.objects.filter(username= all_user_names1[i])
            for user_review in user_reviews:
              ratings_m[i,user_review.books_id] = user_review.book_rating
        # Perform kmeans clustering
      #  k = int(num_users / 10) + 2
        k=4
        kmeans = KMeans(n_clusters=k)
        clustering = kmeans.fit(ratings_m.tocsr())
          
        Cluster.objects.all().delete()
        new_clusters = {i: Cluster(name=i) for i in range(k) }
        for cluster in new_clusters.values(): # clusters need to be saved before referring to users
              cluster.save()
        for i,cluster_label in enumerate(clustering.labels_):  
              new_clusters[cluster_label].users.add(BxUsers.objects.get(username=all_user_names1[i]))

谢谢你帮我解决这个问题

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...