各组点之间的签名距离

时间:2014-04-10 19:52:21

标签: python numpy scipy scikit-learn

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

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

E.g。如果一个y点为(2,4)且一个x点为(3,5),则sum(y-x)距离为2-3 + 4-5 = -2

如何在没有循环的情况下在Python中执行此操作?

1 个答案:

答案 0 :(得分: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