如何解决在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 举报,一经查实,本站将立刻删除。