如何在 python 中找到两个 numpy 数组的最近点

How to find the closests points of two numpy arrays in python

我有两个numpy数组:一个是一些坐标(xyz)和一个id,另一个只是一些坐标(x , y, z):

cord_id=np.array([[0.,0.,0.,8.],[0.,0.,10.,8.],[0.,0.,20.,8.],[0.,0.,30.,8.],\
                  [2.,1.,0.,9.],[2.,1.,10.,7.],[2.,1.,20.,7.],[2.,1.,30.,7.]])
cord_only=np.array([[0.,0.,.1],[0.,0.,20.1],[2.1,1.,0.],[2.,1.,11.1]])

我想找出cord_only的每个点更接近cord_id的哪个点,然后将相关的id(cord_id的最后一列)添加到该点。比如cord_only的第一个点最接近cord_id的第一个点,所以我给它加上8.cord_only 的第二点最接近 cord_id 的第三点,第三点最接近第五点,第四点也最接近第六点。最后,我想得到它:

new_arr=np.array([[0.,0.,.1,8.],[0.,0.,20.1,8.],[2.1,1.,0.,9.],[2.,1.,11.1,7.]])

我尝试了以下代码,但找不到壁橱点:

from scipy.spatial import distance
cord_id[np.where(np.min(distance.cdist(cord_only, cord_id[:,:-1]),axis=0))]

我非常感谢提前在 python 中提供的任何帮助。

使用 np.where(np.min(X)) 不会给你正确的答案,因为 min returns 是最小值(而不是最小值的索引) return 所有非零值在哪里。我想你要找的是 argmin:

from scipy.spatial import distance
ids = cord_id[np.argmin(distance.cdist(cord_only, cord_id[:,:-1]),axis=1)][:,-1]
new_arr = np.hstack([cord_only,ids.reshape(-1,1)])