如何在 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
.
我正在尝试修改闵可夫斯基距离,它可以是欧几里得距离或曼哈顿距离,其中每个维度的权重可以不同。我看到使用 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
.