python - 计算矩阵中一个点与所有其他点之间的距离

标签 python python-2.7 python-3.x numpy array-broadcasting

我是 Python 的新手,我需要实现一个聚类算法。为此,我需要计算给定输入数据之间的距离。

考虑以下输入数据 -

    [[1,2,8],
     [7,4,2],
     [9,1,7],
     [0,1,5],
     [6,4,3]]

我想在这里实现的是,我想计算 [1,2,8] 与所有其他点的距离,并找到距离最小的点。

对于所有其他要点,我必须重复这一点。

我正在尝试使用 FOR 循环来实现它,但我确信 SciPy/NumPy 一定有一个函数可以帮助我有效地实现这个结果。

我在网上查看,但“pdist”命令无法完成我的工作。

有人可以指导我吗?

TIA

最佳答案

使用 np.linalg.norm 结合广播(numpy 外减法),你可以:

np.linalg.norm(a - a[:,None], axis=-1)

a[:,None]a中插入一个新轴,a - a[:,None] 会做一行由广播引起的行减法。 np.linalg.norm 计算最后一个轴上的 np.sqrt(np.sum(np.square(...))):


a = np.array([[1,2,8],
     [7,4,2],
     [9,1,7],
     [0,1,5],
     [6,4,3]])

np.linalg.norm(a - a[:,None], axis=-1)
#array([[ 0.        ,  8.71779789,  8.1240384 ,  3.31662479,  7.34846923],
#       [ 8.71779789,  0.        ,  6.164414  ,  8.18535277,  1.41421356],
#       [ 8.1240384 ,  6.164414  ,  0.        ,  9.21954446,  5.83095189],
#       [ 3.31662479,  8.18535277,  9.21954446,  0.        ,  7.        ],
#       [ 7.34846923,  1.41421356,  5.83095189,  7.        ,  0.        ]])

元素[0,1], [0,2]例如对应于:

np.sqrt(np.sum((a[0] - a[1]) ** 2))
# 8.717797887081348

np.sqrt(np.sum((a[0] - a[2]) ** 2))
# 8.1240384046359608

分别。

关于python - 计算矩阵中一个点与所有其他点之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46700326/

相关文章:

python - 使用 OrderedDictionary 对字谜进行分组 : TypeError issue

python - 无法验证这些要求的哈希值,因为我们没有办法对版本控制存储库进行哈希处理

python - 错误 R14(超出内存配额)在 New Relic 中不可见

python - 导入错误 : No module named <<MyPackage>>

Python - 在字符串中翻转二进制 1's and 0'

Python - List.extend 未返回预期值

python - 为什么其他列表也发生变化?

python - 将 C 枚举导入到 python 中而不包含完整的 header ?

python - 获取字符串中集合中任意字符的第一次出现 - python

python - 如何将值列表转换为字典列表,并将相同的键添加到每个值?