我有一个CSR格式的稀疏矩阵(scipy.sparse.csr_matrix),大约有100,000行和10,000列。行代表用户,列表示项目,矩阵中的值,该用户和项目的评级。
我正在尝试计算两个用户之间的相关性。所以我循环遍历每个用户(称之为user_a),并进行矩阵运算以获得user_a与所有其他用户的相关性。
第一步是生成当前用户矩阵。此矩阵包含当前用户的元素,屏蔽以匹配user_a的公共元素与所有其他用户。
目前我的代码是:
# 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秒
有没有办法减少这些线的时间?
答案 0 :(得分:1)
对于<div style="width: 360px;" class="container">
<div class="row" style="height: 50px;">
<div class="col-xs-1" style="background: red"></div>
<div class="col-xs-1" style="background: green"></div>
<div class="col-xs-9" style="background: orange"></div>
<div class="col-xs-1" style="background: yellow"></div>
</div>
</div>
csr_matrix
和整数ratings
,这会得到与您的代码相同的结果:
user_id
但如果你的scipy版本太旧,它就不会起作用。我不记得哪个版本的scipy扩展了稀疏矩阵的广播行为以使其工作。