【发布时间】:2020-10-02 00:20:25
【问题描述】:
我有一个包含很多行的 pandas 数据框 df。对于每一行,我想计算行的列 A(第一个向量)和行的列 B(第二个向量)之间的余弦相似度。最后,我的目标是为每一行获得一个具有一个余弦相似度值的向量。我找到了一个解决方案,但在我看来,如果没有这个循环,它可以做得更快。有人可以给我一些关于这段代码的反馈吗? 非常感谢!
for row in np.unique(df.index):
cos_sim[row]=scipy.spatial.distance.cosine(df[df.index==row][columnsA],
df[df.index==row][columnsB])
df['cos_sim']=cos_sim
这里有一些示例数据:
df = pd.DataFrame({'featureA1': [2, 4, 1, 4],
'featureA2': [2, 4, 1, 4],
'featureB1': [10, 2, 1, 8]},
'featureB2': [10, 2, 1, 8]},
index=['Pit', 'Mat', 'Tim', 'Sam'])
columnsA=['featureA1', 'featureA2']
columnsB=['featureB1', 'featureB2']
这是我想要的输出(Pit、Mat、Tim 和 Sam 的余弦相似度):
cos_sim=[1, 1, 1, 1]
我已经通过我的方法收到了这个输出,但我确信从性能角度来看代码可以改进
【问题讨论】:
-
欢迎来到 SO。请提供示例数据和所需的输出:)
-
感谢@Chris,提供此提示。我添加了一些示例数据。
标签: pandas performance loops trigonometry similarity