如何在 python 中找到两个 numpy 数组的最近点
How to find the closests points of two numpy arrays in python
我有两个numpy数组:一个是一些坐标(x
,y
,z
)和一个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)])
我有两个numpy数组:一个是一些坐标(x
,y
,z
)和一个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)])