#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