Python中数据帧中每一行之间的余弦相似性
我有一个包含多个向量的数据帧,每个向量有3个条目。在我的表示中,每一行都是一个向量。我需要计算每个向量之间的余弦相似性。将其转换为矩阵表示更好,或者在数据帧本身中是否有更干净的方法 这是我尝试过的代码Python中数据帧中每一行之间的余弦相似性,python,pandas,dataframe,scikit-learn,Python,Pandas,Dataframe,Scikit Learn,我有一个包含多个向量的数据帧,每个向量有3个条目。在我的表示中,每一行都是一个向量。我需要计算每个向量之间的余弦相似性。将其转换为矩阵表示更好,或者在数据帧本身中是否有更干净的方法 这是我尝试过的代码 import pandas as pd from scipy import spatial df = pd.DataFrame([X,Y,Z]).T similarities = df.values.tolist() for x in similarities: for y in sim
import pandas as pd
from scipy import spatial
df = pd.DataFrame([X,Y,Z]).T
similarities = df.values.tolist()
for x in similarities:
for y in similarities:
result = 1 - spatial.distance.cosine(x, y)
你可以直接使用
演示
import numpy as np; import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
df = pd.DataFrame(np.random.randint(0, 2, (3, 5)))
df
## 0 1 2 3 4
## 0 1 1 1 0 0
## 1 0 0 1 1 1
## 2 0 1 0 1 0
cosine_similarity(df)
## array([[ 1. , 0.33333333, 0.40824829],
## [ 0.33333333, 1. , 0.40824829],
## [ 0.40824829, 0.40824829, 1. ]])
请分享您迄今为止所做的尝试,以便我们能够适当地帮助您。@JayanthPrakashKulkarni:在您使用的for循环中,您也在计算行与自身的相似性。您也不需要嵌套循环。迭代行数-1,并计算
df.iloc[i,:]
和df.iloc[i+1,:]
之间的余弦相似性。或者,您可以研究数据帧的应用方法。@ClockSlave感谢您的宝贵意见。我一定会尝试使用DataFrame的apply方法。我尝试过使用您的代码。似乎没有返回相同的数据帧。@Dr.DOOM遗漏了一个。重塑,修复了!