редактировать: этот вопрос касается не только расчета расстояний, а наиболее эффективного способа перебора массива numpy, указывающего, что для индекса i все сравнения должны выполняться с остальной частью массива, пока второй индекс не i.
У меня есть массив numpy со столбцами (X, Y, ID) и я хочу сравнить каждый элемент с другим элементом, но не с самим собой. Итак, для каждой координаты X, Y я хочу вычислить расстояние друг от друга до координат X, Y, но не до себя (где расстояние = 0).
Вот что у меня есть - должен быть более "тупой" способ написать это.
import math, arcpy
# Point feature class
fc = "MY_FEATURE_CLASS"
# Load points to numpy array: (X, Y, ID)
npArray = arcpy.da.FeatureClassToNumPyArray(fc,["SHAPE@X","SHAPE@Y","OID@"])
for row in npArray:
for row2 in npArray:
if row[2] != row2[2]:
# Pythagoras's theorem
distance = math.sqrt(math.pow((row[0]-row2[0]),2)+math.pow((row[1]-row2[1]),2))
Очевидно, я тупой новичок. Я не удивлюсь, обнаружив это дубликат, но у меня нет словарного запаса, чтобы найти ответ. Любая помощь приветствуется!
scipy.spatial.distance.pdist
. - person user2357112 supports Monica   schedule 18.03.2015distances = [dist(x, y) for x in npArray for y in npArray if x != y]
, гдеdist
— некоторая метрика. - person Patrick McLaren   schedule 19.03.2015broadcasting
Nx2 до тензора NxNx2, получить ее транспонированную версию и вычесть их, а затем вычислить норму L2 по третьей оси. Тогда, я думаю, у вас будет ровно матрица парных расстояний. - person Ben Usman   schedule 19.03.2015