以下代码使我的系统在完成之前耗尽了内存。
您能否建议一种在大型矩阵(例如下面的矩阵)上计算余弦相似度的更有效方法?
我想针对原始矩阵(mat)相对于所有其他矩阵计算65000行中的每一行的余弦相似度,以使结果为65000 x 65000矩阵,其中每个元素为原始矩阵中两行之间的余弦相似度矩阵。
import numpy as np
from scipy import sparse
from sklearn.metrics.pairwise import cosine_similarity
mat = np.random.rand(65000, 10)
sparse_mat = sparse.csr_matrix(mat)
similarities = cosine_similarity(sparse_mat)
Run Code Online (Sandbox Code Playgroud)
在运行了最后一行之后,我总是会用完内存,并且该程序会因MemoryError冻结或崩溃。无论我在8 GB本地RAM上还是在64 GB EC2实例上运行,都会发生这种情况。
假设我有一个如下的numpy矩阵:
array([array([ 0.0072427 , 0.00669255, 0.00785213, 0.00845336, 0.01042869]),
array([ 0.00710799, 0.00668831, 0.00772334, 0.00777796, 0.01049965]),
array([ 0.00741872, 0.00650899, 0.00772273, 0.00729002, 0.00919407]),
array([ 0.00717589, 0.00627021, 0.0069514 , 0.0079332 , 0.01069545]),
array([ 0.00617369, 0.00590539, 0.00738468, 0.00761699, 0.00886915])], dtype=object)
Run Code Online (Sandbox Code Playgroud)
如何生成5 x 5矩阵,其中矩阵的每个索引是原始矩阵中两个对应行的余弦相似度?
例如,第0行第2列的值将是原始矩阵中第1行和第3行之间的余弦相似度。
这是我尝试过的:
from sklearn.metrics import pairwise_distances
from scipy.spatial.distance import cosine
import numpy as np
#features is a column in my artist_meta data frame
#where each value is a numpy array of 5 floating point values, similar to the
#form of the matrix …Run Code Online (Sandbox Code Playgroud)