欧几里德距离与权重

时间:2012-01-14 07:38:44

标签: python numpy scipy euclidean-distance

我目前正在使用SciPy来计算欧氏距离

dis = scipy.spatial.distance.euclidean(A,B)

其中; A,B是5维位向量。它现在工作正常,但如果我为每个维度添加权重,那么仍然可以使用scipy吗?

我现在拥有的内容:sqrt((a1-b1)^2 + (a2-b2)^2 +...+ (a5-b5)^2)

我想要的是:sqrt(w1(a1-b1)^2 + w2(a2-b2)^2 +...+ w5(a5-b5)^2)使用scipy或numpy或任何其他有效方式来执行此操作。

由于

3 个答案:

答案 0 :(得分:8)

编写自己的加权L2规范的建议很好,但this answer中提供的计算不正确。如果打算计算

enter image description here

然后这应该做的工作:

def weightedL2(a,b,w):
    q = a-b
    return np.sqrt((w*q*q).sum())

答案 1 :(得分:1)

只需自己定义即可。这样的事情可以解决问题:

def mynorm(A, B, w):
    import numpy as np
    q = np.matrix(w * (A - B))
    return np.sqrt((q * q.T).sum())

答案 2 :(得分:1)

如果您想继续使用scipy函数,可以对向量进行预处理。

def weighted_euclidean(a, b, w):
    A = a*np.sqrt(w)
    B = b*np.sqrt(w)
    return scipy.spatial.distance.euclidean(A, B)

但是看起来比它慢

def weightedL2(a, b, w):
    q = a-b
    return np.sqrt((w*q*q).sum())