Проблема с окончательным кодом при поиске ближайшего соседа

#python #for-loop #spyder #nearest-neighbor

#python #для цикла #спайдер #ближайший сосед

Вопрос:

Мне нужна помощь для этого кода в определении ближайшего соседнего расстояния между точками. Я думаю, проблема в том, что вместо добавления ‘nearestdistance’ к ‘Sumdistance’, только если оно меньше предыдущего ‘newdistance’, оно добавляет ближайшее расстояние, несмотря ни на что. Хотя я могу ошибаться. Код, показанный ниже:

 q = loadPoints(f)

n = 1416
Sumdistance = 0

for i in q:
    iID = int(i.getID())
    x1 = float(i.getX())
    y1 = float(i.getY())
    nearestdistance = 999999999999999999999999999
    for j in range(0, n):
        if j != iID:
            jID = (q[j].getID())
            x2 = float(q[j].getX())
            y2 = float(q[j].getY())
            dx = x1 - x2
            dy = y1 - y2
            newdistance = math.sqrt(math.pow(dx,2)   (math.pow(dy,2)))
                                
            if newdistance < nearestdistance:
                nearestdistance = newdistance
                else nearestdistance = 
                
    Sumdistance = Sumdistance   nearestdistance
    
area = 10000000000
Do = Sumdistance/n
De = 0.5/(math.sqrt(n/area))
ANN = Do/De
print(ANN)
  

Спасибо!

Ответ №1:

Вы правы — вы всегда должны добавлять nearestdistance в Sumdistance после повторения соседей.

 for i in q:
    ......
    for j in range(0, n):
        if j != iID:
            ........
                                
            if newdistance < nearestdistance:
                nearestdistance = newdistance
                
    Sumdistance  = nearestdistance
  

Обратите внимание, что окончательная сумма будет включать обратных соседей, т.Е. a -> b и b -> a