我试图找到一种合适的方法来比较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)