【发布时间】:2010-12-24 16:47:21
【问题描述】:
我有两个 x-y 坐标数组,我想在一个数组中找到 每个 点之间的最小欧几里得距离all 是另一个数组中的点。数组不一定大小相同。例如:
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(长度m)和xy2(长度p)连接成xy(长度n),然后我存储原始数组的长度。从理论上讲,我应该能够从那些我可以从中获取 m x p 子矩阵的坐标生成一个 n x n 距离矩阵。有没有办法有效地生成这个子矩阵?
【问题讨论】:
-
如果你需要加速你的代码,你应该删除不必要的numpy.sqrt(并且只有在你找到它时才取最小平方距离的平方根)。
标签: python numpy euclidean-distance