【问题标题】:vectorized / linear algebra distance between points?点之间的矢量化/线性代数距离?
【发布时间】:2019-01-23 15:46:27
【问题描述】:

假设我有一个点数组,

import numpy as np
pts = np.random.rand(100,3)  # 1000 points, X, Y, Z along second dimension

计算每个点组合之间距离的幼稚方法涉及双 for 循环,并且对于大量点来说会非常缓慢,

def euclidian_distance(p1, p2):
    d = p2 - p1
    return np.sqrt(d**2).sum()

out = np.empty((pts.shape[0], pts.shape[0]))
pts_swapped = pts.swapaxes(0,1)
for idx, point in enumerate(pts_swapped):
    for idx2, point_inner in enumerate(pts_swapped):
        out[idx,idx2] = euclidian_distance(point, point_inner)

如何向量化这个计算?

【问题讨论】:

  • 看看scipy.cdist函数。我不确定,但我认为 scipy 对此进行了很多优化。如果你对两个输入都使用 pts 数组,我假设你会得到一个 M x M 数组,对角线上有零。
  • 谢谢!如果您将此作为答案提交,我可以将其标记为已接受。

标签: python numpy


【解决方案1】:

看看scipy.spatial.distance.cdist。我不确定,但我认为 scipy 对此进行了很多优化。如果您对两个输入都使用 pts 数组,我假设您将得到一个 M x M 数组,其中对角线为零。功能

【讨论】:

  • 可能需要校对这个。看起来你重复了几个句子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2018-06-13
相关资源
最近更新 更多