Python 点集之间的符号距离

Python 点集之间的符号距离,python,numpy,scipy,scikit-learn,Python,Numpy,Scipy,Scikit Learn,假设我有两组点,X和Y可能包含不同数量的点,并且具有不同的维度。我们可以假设X和Y是nxmnumpy数组(n个点,每个维度m) 我想获得y和x中点之间距离的sum(y-x)分布(中值和标准) 例如,如果一个y点是(2,4),一个x点是(3,5),那么和(y-x)距离将是2-3+4-5=-2 在Python中,如何在不循环的情况下做到这一点?快速浏览不会产生任何结果,因此您可能需要使用广播: >>> a = np.random.rand(5,3) #(N x M) >>

假设我有两组点,
X
Y
可能包含不同数量的点,并且具有不同的维度。我们可以假设
X
Y
nxm
numpy数组(n个点,每个维度m)

我想获得
y
x
中点之间距离的
sum(y-x)
分布(中值和标准)

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

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

快速浏览不会产生任何结果,因此您可能需要使用广播:

>>> 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

若要仅获得每个坐标的距离平均值,是否可以先计算每组点的中心(即平均值),然后计算中心之间的差值?如果希望阵列具有不同的维度,则不应使它们都具有形状n x m。最好能更清楚地说明这一点。正如下面解释的,广播是处理此类内容而不调用循环的默认方式。但是,根据向量的长度,它创建的三维阵列可能比您想要的大。