点集之间的符号距离

1 投票
1 回答
1137 浏览
提问于 2025-04-18 02:15

假设我有两组点,分别叫做 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 中做到这一点,而不使用循环。

1 个回答

3

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

撰写回答