【发布时间】:2018-12-10 12:53:52
【问题描述】:
我正在尝试使用 scipy 稀疏矩阵来实现余弦相似度,因为我在使用普通矩阵(非稀疏矩阵)时遇到了内存错误。但是,我注意到当输入矩阵(观察)的大小很大时,稀疏和非稀疏矩阵的余弦相似度的内存大小(以字节为单位)几乎相同。我做错了什么,或者,有没有办法解决这个问题?这是输入有 5% 为 1 和 95% 为 0 的代码。
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from scipy import sparse
A = np.random.rand(10000, 1000)<.05
A_sparse = sparse.csr_matrix(A)
similarities = cosine_similarity(A_sparse)
# output sparse matrices
similarities_sparse = cosine_similarity(A_sparse,dense_output=False)
print("1's percentage", np.count_nonzero(A)/np.size(A))
print('memory percentage', similarities_sparse.data.nbytes/similarities.data.nbytes)
一个符文的输出是:
1's percentage 0.0499615
memory percentage 0.91799018
【问题讨论】:
-
similarities是 92%“满” -
您的
A过于密集,无法产生稀疏相似性。每行平均有 50 个 1,您仍然很有可能获得非零相似性。试试<.005,你会看到不同。
标签: python scipy out-of-memory sparse-matrix