gpt4 book ai didi

python - Scipy 稀疏矩阵在余弦相似度方面内存效率不高

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

我正在尝试使用 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)

一个 rune 的输出是:

1's percentage 0.0499615
memory percentage 0.91799018

最佳答案

将@hpaulj 的评论阐述为答案:

cosine_similarity 的两次调用都返回相同的基础数据。该余弦相似度矩阵大部分不为零,因此使用稀疏格式不会节省空间。

大部分为零的输入数据不一定(甚至通常)会产生大部分为零的余弦相似度矩阵。 Cosine(i,j) = 0 仅在矩阵的一对行 (i, j) 的任何相同列中没有值的情况下出现 (*)。

(* 或者如果点积结果为 0,但这是这里的一个侧面。)

关于python - Scipy 稀疏矩阵在余弦相似度方面内存效率不高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53706095/

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