gpt4 book ai didi

python - 在轴 0 上重复 csr_matrix 行以创建矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:40 28 4
gpt4 key购买 nike

我有一个 CSR 格式的稀疏矩阵 (scipy.sparse.csr_matrix),包含大约 100,000 行和 10,000 列。行代表用户,列代表项目,矩阵中的值代表该用户和项目的评分。

我正在尝试计算两个用户之间的相关性。因此,我循环遍历每个用户(称为 user_a),并进行矩阵运算以获得 user_a 与所有其他用户的相关性。

第一步是生成当前用户矩阵。该矩阵包含当前用户的元素,经过屏蔽以匹配 user_a 与所有其他用户的公共(public)元素。

我现在的代码是:

# ratings is the big original matrix
R = ratings.getrow(user_id)
user_matrix = sparse.csr_matrix(R)
user_matrix = user_matrix[numpy.array([0]).repeat(ratings.shape[0]),:]
user_matrix = user_matrix.multiply(ratings.astype(numpy.bool))

( https://stackoverflow.com/a/25342156/947194 )

但是对于只有 500 个项目的用户来说,这些行需要 4 秒。我需要为每个用户运行它(100,000 次)。所以有点慢。

我尝试使用vstack生成user_matrix,但花了7秒

有没有办法减少这些线路的时间?

最佳答案

对于 csr_matrix ratings 和整数 user_id,这给出与您的代码相同的结果:

valid_ratings = ratings.astype(bool)
user_matrix = valid_ratings.multiply(ratings[user_id])

但是如果你的 scipy 版本太旧,它就不起作用。我不记得哪个版本的 scipy 扩展了稀疏矩阵的广播行为来实现这项工作。

关于python - 在轴 0 上重复 csr_matrix 行以创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34225584/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com