我有X兩個數組 - ÿ座標,並且我想找到在一個陣列與每個點之間的最小歐幾里得距離全部其他陣列中的點。數組不一定是相同的大小。例如:最小歐幾里德距離,而不是內
xy1=numpy.array(
[[ 243, 3173],
[ 525, 2997]])
xy2=numpy.array(
[[ 682, 2644],
[ 277, 2651],
[ 396, 2640]])
我的當前方法遍歷每個座標在xy1
xy
並且計算的距離之間的座標和其他座標。
mindist=numpy.zeros(len(xy1))
minid=numpy.zeros(len(xy1))
for i,xy in enumerate(xy1):
dists=numpy.sqrt(numpy.sum((xy-xy2)**2,axis=1))
mindist[i],minid[i]=dists.min(),dists.argmin()
有沒有辦法消除for循環,並以某種方式做兩個數組之間的逐個元素的計算?我設想生成一個距離矩陣,我可以在其中找到每行或每列中的最小元素。
查看問題的另一種方法。說我串聯xy1
(長度米)和xy2
(長度p)插入xy
(長度Ñ)和I存儲原始陣列的長度。從理論上講,我應該能夠從這些座標中產生一個距離矩陣,我可以從這些座標中獲取一個子矩陣。有沒有辦法有效地生成這個子矩陣?
點的集合的最小距離如果需要加快實現你的代碼,你應該刪除不必要的numpy.sqrt(並且只有當你找到它時,取最小平方距離的平方根)。 – EOL 2009-12-09 10:03:46