Как применить функцию к каждому элементу массива?
Допустим у меня есть 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]])