【发布时间】:2017-08-03 09:47:12
【问题描述】:
我想计算熊猫数据框中每行之间的余弦距离。在计算距离之前,我只想选择大于 0 且相交的向量中的元素(两行都有值)。例如,row1 [0,1,45,0,0] 和 row2 [4,11,2,0,0]。在这种情况下,程序将只计算 [1,45] 和 [11,2] 之间的余弦距离。这是我的脚本,但这需要很长时间才能完成。任何有关简化脚本和减少处理时间的帮助表示赞赏。
data = df.values
m, k = data.shape
dist = np.zeros((m, m))
for i in range(m):
for j in range(i,m):
if i!=j:
vec1 = data[i,:]
vec2 = data[j,:]
pairs = [(x, y) for (x, y) in zip(vec1, vec2) if x > 0 and y > 0]
if pairs:
sub_list_1, sub_list_2 = map(list, zip(*pairs))
dist[i][j] = dist[j][i]=cosine(sub_list_1, sub_list_2)
else:
dist[i][j]= dist[j][i] =1
else:
dist[i][j]=0
【问题讨论】:
标签: python pandas numpy vectorization trigonometry