假设我有两组点X
和Y
,它们可能包含不同数量的点,并且具有不同的维度。我们可以假设X
和Y
是n x m
numpy数组(n点,每个点m维)
我想获得Y
和X
中的点之间的sum(y-x)
距离的分布(中位数和标准差)。
例如,如果一个y
点是(2,4)
,一个x
点是(3,5)
,那么sum(y-x)
距离将是2-3 + 4-5 = -2
。
我怎样才能在Python中做到这一点而不进行循环?
发布于 2014-04-11 04:04:55
快速浏览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
https://stackoverflow.com/questions/22997726
复制相似问题