2016-01-20 52 views
1

我想计算文章之间的余弦相似度。我遇到了一个问题,即我的实现方法需要很长时间来处理我要运行的数据的大小。如何在Python中为余弦相似度运行大型矩阵?

from scipy import spatial 
import numpy as np 
from numpy import array 
import sklearn 
from sklearn.metrics.pairwise import cosine_similarity 

I = [[3, 45, 7, 2],[2, 54, 13, 15], [2, 54, 1, 13]] 

II = [2, 54, 13, 15] 

print cosine_similarity(II, I) 

以上例为例,计算I和II已经花了1.0s,我的数据的维数在(100K,2K)左右。

是否有其他软件包可用于运行巨大的矩阵?

+1

几个例子在这里http://stackoverflow.com/questions/18424228/cosine-similarity-between-2-number-lists – tinySandy

+1

@minitoto最好的答案就是实施我有。但我认为这并不能解决大规模数据的问题。 – YAL

回答

0

随着sklearn.preprocessing.normalize,这工作更快我

result = np.dot(normalize(II, axis=1), normalize(I, axis=1).T) 

(单元归一化矢量之间的点积相当于余弦相似性)。

1

您可以使用metricwise ='cosine'和n_jobs =的pairwise_kernels。这将划分数据并运行它并行

+0

不幸的是,与cosine_similarity方法不同,这不支持稀疏输出。 – robodasha