如何在 python 中对距离度量的不同维度应用不同的权重?

How to apply different weights to different dimensions for distance metric in python?

我正在尝试修改闵可夫斯基距离,它可以是欧几里得距离或曼哈顿距离,其中每个维度的权重可以不同。我看到使用 scipy 给出答案的帖子似乎回答了一个略有不同的问题。在我的例子中,我的距离度量只有 2 个维度,我希望能够控制每个维度的权重。

他就是我现在的样子。我想找到一个更 numpy/scipy 的方法来做到这一点:

t1 = np.array([2,4])
t2 = np.array([1,2])

def weighted_minkowski(t1,t2,w = .3, p = 2):
    return np.sqrt(w*((t1[0]-t2[0])**p)+(1-w)*((t1[1]-t2[1])**p))

你可以这样做:

def weighted_minkowski(t1, t2, w=.3, p=2):
    return np.sqrt([w, 1-w] @ (t1 - t2)**p)

解释:形成权重向量[w, 1-w],然后将其与两个向量之差的p次方进行点积。

我假设 Python 3.5 或更高版本,它具有矩阵乘法运算符 @。应用于向量,这给出了点积。在较早的 Python 版本中,您可以使用 np.dot.