У меня есть два массива координат x-y, и я хотел бы найти минимальное евклидово расстояние между каждой точкой в одном массиве со всеми точками в другом массиве. Массивы не обязательно одинакового размера. Например:
xy1=numpy.array(
[[ 243, 3173],
[ 525, 2997]])
xy2=numpy.array(
[[ 682, 2644],
[ 277, 2651],
[ 396, 2640]])
Мой текущий метод проходит через каждую координату xy
в xy1
и вычисляет расстояния между этой координатой и другими координатами.
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()
Есть ли способ устранить цикл for и каким-то образом выполнять поэтапные вычисления между двумя массивами? Я представляю себе создание матрицы расстояния, для которой я мог бы найти минимальный элемент в каждой строке или столбце.
Еще один способ взглянуть на проблему. Скажем, я конкатенирую xy1
(длина m) и xy2
(длина p) в xy
(длина n), и я сохраняю длины исходных массивов. Теоретически, я должен был бы создать матрицу расстояния n x n из тех координат, из которых я могу захватить подматрицу m x p. Есть ли способ эффективно генерировать эту подматрицу?