相关疑难解决方法(0)

两个不同Numpy阵列中点之间的最小欧几里德距离,而不是在

我有两个x - y坐标数组,我想找到一个数组中每个点与另一个数组中所有点之间的最小欧几里德距离.阵列的大小不一定相同.例如:

xy1=numpy.array(
[[  243,  3173],
[  525,  2997]])

xy2=numpy.array(
[[ 682, 2644],
[ 277, 2651],
[ 396, 2640]])
Run Code Online (Sandbox Code Playgroud)

我目前的方法遍历每个坐标xyxy1计算之间的协调距离和其他坐标.

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()
Run Code Online (Sandbox Code Playgroud)

有没有办法消除for循环,并以某种方式在两个数组之间进行逐元素计算?我设想生成一个距离矩阵,我可以在其中找到每行或每列中的最小元素.

另一种看待问题的方法.假设我将xy1(长度为m)和xy2(长度为p)连接成xy(长度为n),并存储原始数组的长度.从理论上讲,我应该能够从那些我可以获取mxp子矩阵的坐标生成一个nxn距离矩阵.有没有办法有效地生成这个子矩阵?

python numpy euclidean-distance

39
推荐指数
5
解决办法
3万
查看次数

凝聚矩阵函数找到对

对于一组观察:

[a1,a2,a3,a4,a5]
Run Code Online (Sandbox Code Playgroud)

他们的成对距离

d=[[0,a12,a13,a14,a15]
   [a21,0,a23,a24,a25]
   [a31,a32,0,a34,a35]
   [a41,a42,a43,0,a45]
   [a51,a52,a53,a54,0]]
Run Code Online (Sandbox Code Playgroud)

以浓缩矩阵形式给出(上面的上三角形,由下式计算 scipy.spatial.distance.pdist):

c=[a12,a13,a14,a15,a23,a24,a25,a34,a35,a45]
Run Code Online (Sandbox Code Playgroud)

问题是,假设我在压缩矩阵中有索引,那么有一个函数(最好是在python中)f可以快速给出哪两个观察结果来计算它们?

f(c,0)=(1,2)
f(c,5)=(2,4)
f(c,9)=(4,5)
...
Run Code Online (Sandbox Code Playgroud)

我尝试了一些解决方案,但没有一个值得一提:(

python algorithm math statistics scipy

10
推荐指数
2
解决办法
2575
查看次数

标签 统计

python ×2

algorithm ×1

euclidean-distance ×1

math ×1

numpy ×1

scipy ×1

statistics ×1