2016-01-20 35 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