【发布时间】:2015-05-17 19:14:08
【问题描述】:
我通过读取目录中的大量文件生成了一个大数据框。我已经设法并行化读取解析文件的部分。我获取该数据并为下一步生成数据框。这是计算相似度矩阵。
现在,我正在尝试计算数据框各行之间的余弦相似度。由于它的数据框很大,因此需要很长时间(数小时)才能运行。我怎样才能并行化这个过程。
这是我当前在单线程上运行的计算余弦相似度的代码:
df = df.fillna(0)
data = df.values
m, k = data.shape
mat = np.zeros((m, m))
"""
scipy cosine similarity is between 0-2 instead of -1 to 1
in that case 1 is 0 and 2 is -1
"""
for i in xrange(m):
for j in xrange(m):
if i != j:
mat[i][j] = 1 - cosine(data[i,:], data[j,:])
else:
mat[i][j] = 1. # 0 if we don't do 1-cosine()
【问题讨论】:
-
你试过
squareform(pdist(data, 'cosine'))了吗?同样来自scipy.spatial.distance。它应该比双 for 循环快很多。 -
cosine这个是:scipy.spatial.distance.cosine吗? -
@hpaulj 是的,我正在使用
scipy.spatial.distance.cosine,您认为sklearn更好吗?
标签: python multithreading scipy multiprocessing cosine-similarity