将多个D点的数组按到参考点的距离排序

问题描述 投票:0回答:2

我将参考点p_ref存储在形状为(1024,)的numpy数组中,类似于:

print(p_ref)
>>> array([ 10.0,  11.0,  10.2, ..., 9.7])

[我还有一个numpy数组A_points,其形状为(1024,5000),包含5000个点,每个点都具有p_ref之类的1024个维度。我的问题:我想按A_pointsp_ref的(祖父)距离对这些点进行排序!

我该怎么做?我读到有关scipy.spatial.distance.cdistscipy.spatial.KDTree的信息,但是它们都没有完全按照我想要的去做,当我尝试将它们结合在一起时,我一团糟。谢谢!

python numpy sorting multidimensional-array distance
2个回答
0
投票

我希望我能正确理解您,但是您可以使用numpy.linalg.norm计算两个向量之间的距离。使用它应该很简单:

sorted( mypoints, key = lambda x: numpy.linalg.norm(x - p_ref ) )

0
投票

您可以做这样的事情-

A_points[np.linalg.norm(A_points-p_ref[:,None],axis=1).argsort()]

[另一个具有np.einsum的效率应该比np.linalg.norm-]高>

d = A_points-p_ref[:,None]
out = A_points[np.einsum('ij,ij->i',d,d).argsort()]
© www.soinside.com 2019 - 2024. All rights reserved.