【问题标题】:Manhattan distance between 2 vectors2个向量之间的曼哈顿距离
【发布时间】:2020-10-19 08:58:55
【问题描述】:

我需要计算两个向量之间的曼哈顿距离

我找到了这段代码 https://www.geeksforgeeks.org/sum-manhattan-distances-pairs-points/

def distancesum (x, y, n): 
    sum = 0
      
    # for each point, finding distance 
    # to rest of the point 
    for i in range(n): 
        for j in range(i+1,n): 
            sum += (abs(x[i] - x[j]) +
                        abs(y[i] - y[j])) 
      
    return sum

但在另一个文档中,我找到了曼哈顿的这段代码

所以代码是:

def manhattan_distance(instance1, instance2):
    n = len(instance1)-1
    sum = 0
    # for each point, finding distance
    # to rest of the point
    for i in range(n):
        sum += abs(float(instance1[i]) - float(instance2[i]))
    return sum

曼哈顿距离的算法是什么

【问题讨论】:

  • 为什么是n = len(instance1)-1 ??在我看来,没有理由从总和中省略最后一个组件! ֍ 无论如何,恕我直言,你应该写manhattan=sum(abs(float(x2)-float(x1))for x1,x2 in zip(instance1,instance2)) ...

标签: python distance heuristics


【解决方案1】:

这里是一个计算曼哈顿距离的例子。

In [1]: %paste                                                                                                                                               
import numpy as np

def manhattan_distance(a, b):
    return np.abs(a - b).sum()

a = np.array([1, 2])
b = np.array([-1, 4])
print(manhattan_distance(a, b))

## -- End pasted text --
4

如果处理的是字符串向量

In [1]: %paste                                                                                                                                               
import numpy as np

def manhattan_distance(a, b):
    return np.abs(a - b).sum()

a = ['1', '2']
b = ['-1', '4']
print(manhattan_distance(np.array(a, dtype=float), np.array(b, dtype=float)))
## -- End pasted text --
4.0

【讨论】:

  • 除了 OP 似乎正在处理字符串列表
  • @gboffi 更新帖子以展示如何处理字符串数组
【解决方案2】:

在引用的公式中,您有 n 个点,每个点有 2 个坐标,并且您计算一个向量与其他向量的距离。因此,除了符号之外,两个公式都是相同的。两个向量之间的曼哈顿距离是它们坐标差的绝对值之和。一个容易记住的方法是,向量到自身的距离必须为 0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多