如何在python中找到正确的向量/数组相似性?



我试图找到一种合适的方法来比较2个数组/向量,不是基于直接布尔比较,而是基于规模或梯度[0,1]。最接近的是余弦相似度,但这似乎也不是我想要的。

的例子:

from scipy import spatial
a = np.array([1,2,3,4,10])
b = np.array([1,2,3,4,5])
print(1 - spatial.distance.cosine(a,b))

这给了0.9460998335825321,并为我工作。

但是对于以下情况:

from scipy import spatial
a = np.array([1,1,1,1,1])
b = np.array([1,2,3,4,5])
print(1 - spatial.distance.cosine(a,b))

不应该给0.9045340337332909…我预期的数字要低得多,比如0.2。在这里使用什么工具比较好?

感谢

你可以用它们之间的夹角来判断它们之间的距离,如果夹角接近0,那么其中一个是另一个的倍数(它们几乎相同,方向相同),如果夹角接近180度,它们是相反的向量。

你可以这样计算角度:

import numpy as np
import math
v1 = np.array([1,2,3,4,5])
v2 = np.array([1,2,3,4,10])
def magnitude(v):
return np.sqrt(v.dot(v))
def angle(v1,v2):
#returns the angle between two vectors
a = np.arccos(v1.dot(v2)/(magnitude(v1)*magnitude(v2)))
return math.degrees(a) #standarize the angle from 0 to 1 with a = 1-(a/180)

最新更新