как вычислить евклидово расстояние двух массивов numpy путем широковещательной передачи [дубликат]

Aug 16 2020

Я хотел бы рассчитать евклидово расстояние двух массивов numpy.

Каждая строка в массиве - это вектор.

например

a = np.array([125, 20, 210, 55], [11, 97, 111, 71])
b = np.array([51, 19, 35, 65], [59, 80, 37, 60])

Мне нужно рассчитать евклидово расстояние каждой строки в a с каждой строкой в ​​b.

Фактический размер массива может составлять 5000 строк и 4000 столбцов.

Я знаю, как это сделать с помощью двух циклов for и одного цикла for. Мне нужно решить это векторизованным массивом numpy. например, транслируйте массив другому, напримерhttps://numpy.org/devdocs/user/theory.broadcasting.html

без использования

 spatial.distance.cdist

но я не могу понять, как это сделать.

Любая помощь будет оценена по достоинству.

Ответы

AagamSheth Aug 16 2020 at 13:03
import numpy as np

np.sqrt((np.square(a[:,np.newaxis] - b).sum(axis=2)))