找到第5个最近点到点列表中每个点的距离

问题描述 投票:0回答:3
 xy[0].sort()
 DT=[]
 for i in range(5982):
       xf=np.abs(xy[0][i]-xy[0][i+1])
       yf=np.abs(xy[1][i]-xy[1][i+1])
       D=((xf**2)+(yf**2))**0.5
       DT.append(D)`

 DT.sort()
 R5=[]
 for i in range(5977):
    R=np.abs(DT[i]-DT[i+4])
    R5.append(R)`

正如标题所示我试图找到列表xy中每个点的第5个最近点,其中包含形状中的所有点(2,5983),但是Im使用的方法返回第5个最近距离而不采取考虑到x和y方向的点。任何有关解决此问题的帮助将不胜感激!

python python-3.x numpy
3个回答
0
投票

如果我理解你想要什么,这应该给你最接近的第5个索引:

fifth = []
for i in range(len(xy)):
    distances = ((xy.T-xy.T[i])**2).sum(axis=1)
    fifth.append(np.argsort(distances)[5])

如果xy在形状(样本,尺寸)中,那么我可以使用传输。否则它会使迭代的可读性降低。但你可以改变这一点。你计算所有的距离,没有必要做sqrt,因为sqrt是单调的,你只是在寻找订单。然后我使用第6个元素(索引5),因为为了简单起见,我没有跳过自我,这将是距离0.希望这有助于并且很清楚


0
投票

使用:

from scipy.spatial.distance import pdist,squareform
Y = pdist(xy, 'euclidean')

例:

>>a = [[1,2],[3,4],[5,6]]
>>Y = pdist(a, 'euclidean')
>>Y
array([2.82842712, 5.65685425, 2.82842712])

第一个元素是a0和a1之间的距离,第二个元素是a0和a2之间的距离,第三个元素是a1和a2之间的距离。

或者您可以使用方形:

>>square = squareform(pdist(a))
>>square
array([[0.        , 2.82842712, 5.65685425],
       [2.82842712, 0.        , 2.82842712],
       [5.65685425, 2.82842712, 0.        ]])

之后,使用:

np.argsort(square)

你会得到你想要的东西。

检查pdist documentation


0
投票

尽量不要过多地更改代码。第一部分计算每对点之间距离的平方(正如Tacratis指出的那样,平方根是单调的)。然后它找到每个点的第五个最近点并返回一个数组,其中ith元素是点i的第五个最近点。

DT = []
    for i in range(5983):
        d_i = []
        for j in range(5983):
            xf=np.abs(xy[0][i]-xy[0][j])
            yf=np.abs(xy[1][i]-xy[1][j])
            d_ij =(xf**2)+(yf**2)
            d_i.append(d_ij)
        DT.append(d_i)

R5 = []
for i in range(5983):
    R = DT[i].index(sorted(DT[i])[5]) 
    R5.append(R)

print R5 
© www.soinside.com 2019 - 2024. All rights reserved.