【问题标题】:Signed distances between sets of points点集之间的有符号距离
【发布时间】:2014-05-24 17:33:30
【问题描述】:

假设我有两组点 XY 可能持有不同数量和不同维度的点。我们可以假设XYn x m numpy 数组(n 个点,每个 m 维)

我想获得sum(y-x)YX 中的点之间距离的分布(中位数和标准差)。

例如如果一个y 点是(2,4),一个x 点是(3,5),那么sum(y-x) 距离就是2-3 + 4-5 = -2

如何在不循环的情况下在 Python 中做到这一点?

【问题讨论】:

  • 如果你希望你的数组具有不同的维度,你不应该让它们都具有 n x m 的形状。最好把它说得更清楚。如下所述,广播是处理这类事情的默认方式,无需调用循环。但是,根据向量的长度,它创建的 3D 数组可能比您想要的要大。

标签: python numpy scipy scikit-learn


【解决方案1】:

快速浏览scipy.spatial.distance 没有产生任何结果,因此您可能需要使用广播:

>>> a = np.random.rand(5,3) #(N x M)
>>> b = np.random.rand(4,3) #(K X M)
>>> dists = np.sum(a[:,None,:] - b, axis=-1)
>>> dists
array([[-0.57713957, -1.88996939, -0.13993727, -1.17222018],
       [ 0.89288677, -0.41994304,  1.33008907,  0.29780616],
       [ 0.45866859, -0.85416123,  0.89587088, -0.13641203],
       [ 1.12909228, -0.18373754,  1.56629457,  0.53401166],
       [ 0.64299673, -0.66983308,  1.08019903,  0.04791612]])

现在只需获取中位数和标准:

>>> np.median(dists)
0.17286113728020264
>>> np.std(dists)
0.88228393506243197

【讨论】:

  • 仅仅获得每个坐标的距离平均值,是不是不能先计算每组点的中心(即平均值),然后取两者之间的差中心?
猜你喜欢
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 2015-11-01
  • 2020-02-07
相关资源
最近更新 更多