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

如何在python中找到两个numpy数组的最接近点,python,arrays,numpy,distance,Python,Arrays,Numpy,Distance,我有两个numpy数组:一个是带有id的一些坐标(x,y,z),另一个只是一些坐标(x,y,z): 我想找出cord\u only的每个点与cord\u id的哪个点更接近,然后将相关id(cord\u id的最后一列)添加到该点。例如,cord\u only的第一个点最接近cord\u id的第一个点,因此我将8.添加到它。cord_only的第二个点与cord_id的第三个点最接近,第三个点与第五个点最接近,第四个点也与第六个点最接近。最后,我想将其作为: new_arr=np.array(

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

我想找出
cord\u only
的每个点与
cord\u id
的哪个点更接近,然后将相关id(
cord\u id
的最后一列)添加到该点。例如,
cord\u only
的第一个点最接近
cord\u 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返回最小值(而不是最小值的索引),where将返回所有非零。我想你要找的是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)])
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)])