6

我目前正在使用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 或任何其他有效的方式来做到这一点。

谢谢

4

3 回答 3

9

编写自己的加权 L2 范数的建议是一个很好的建议,但这个答案中提供的计算是不正确的。如果打算计算

在此处输入图像描述

那么这应该可以完成工作:

def weightedL2(a,b,w):
    q = a-b
    return np.sqrt((w*q*q).sum())
于 2012-01-14T11:46:52.110 回答
1

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

def mynorm(A, B, w):
    import numpy as np
    q = np.matrix(w * (A - B))
    return np.sqrt((q * q.T).sum())
于 2012-01-14T07:57:21.180 回答
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())
于 2019-11-27T15:25:34.767 回答