python - 点集之间的有符号距离

标签 python numpy scipy scikit-learn

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

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

例如如果一个 y 点是 (2,4) 并且一个 x 点是 (3,5)sum(y-x) 距离将为 2-3 + 4-5 = -2

如何在 Python 中做到这一点而不需要循环?

最佳答案

快速浏览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

关于python - 点集之间的有符号距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22997726/

相关文章:

python - 如何防止 Numpy 拆分类似数组的对象

python - 使用 Numpy 高效地按行排列数组

python - 获取给定顶点坐标的多边形轮廓和多边形掩码的坐标

python - python中的ANOVA使用带有statsmodels或scipy的pandas数据框?

python - 截断 SciPy 随机分布

python - 在特定元素的实例之后从列表中提取相同的元素 block

python - Django:celery 任务不使用 .delay() 执行

python - 如何根据时间段评估日志跟踪

python - 如何通过迭代现有列的值来创建新列?

python - 具有同一行字符的单元格合并为一个单元格