Как применить функцию к каждому элементу массива?

Допустим у меня есть 5 точек с координатами (8, 15), (12, 12), (6, 12), (7, 19), (10, 19) массивы x и y. Так же у меня еще есть две новые точки с координатами (9, 20) и (15, 10) массивы x0 и y0. Теперь я хочу получить для каждой новой точки массив расстояний до других 5 точек через функцию dist. Есть ли возможность вычислить need_massive без использования цикла?

import numpy as np
def dist(x, y, x0, y0):
    return np.sqrt((x-x0)**2 + (y-y0)**2)

x = np.array([ 8, 12,  6,  7, 10])
y = np.array([15, 12, 12, 19, 19])
x0 = np.array([ 9, 15])
y0 = np.array([20, 10])

distance = []
for i in range(len(x0)):
    distance.append(dist(x, y, x0[i], y0[i]))
need_massive = np.array(distance)
print(need_massive)

Ответы (1 шт):

Автор решения: MaxU

Воспользуйтесь функцией scipy.spatial.distance.cdist:

from scipy.spatial.distance import cdist

A = np.column_stack([x, y])
B = np.column_stack([x0, y0])

res = cdist(A, B)

результат:

In [104]: res
Out[104]:
array([[ 5.09901951,  8.60232527],
       [ 8.54400375,  3.60555128],
       [ 8.54400375,  9.21954446],
       [ 2.23606798, 12.04159458],
       [ 1.41421356, 10.29563014]])
→ Ссылка