Евклидово расстояние между наборами координат в сетке и фиксированной точкой

Я пытаюсь найти евклидово расстояние между наборами координат и фиксированной точкой.

У меня есть наборы MxN координат x, y, z, и я хочу найти расстояние между ними и фиксированной координатой x, y, z.

Я знаю, что могу использовать пару циклов for для итерации и вычисления расстояний 1 на 1 с помощью scipy.spatial.distance.euclidean, но это занимает много времени, когда количество координат становится большим (например, 100x40). Есть ли способ сделать это более эффективно?

Очень краткий пример для obchardon

c = np.array([[[1,2,3],[4,5,6,]],[[1,1,1],[2,2,2]],[[6,5,4],[2,3,1]]])
# shape = (3,2,3) so 3x2 sets of x,y,z coords, so desire 3x2=6 sets of distances
s = np.array([[0],[0],[1]]) 

DISTANCEFUNC(c,s) -> 3x2 sets of euclidean distances

Пожалуйста, создайте Минимальный воспроизводимый пример.

obchardon 23.11.2022 13:56

@obchardon Я отредактировал его, чтобы привести пример

Jack 23.11.2022 14:20
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
0
2
137
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать np.linalg.norm:

import numpy as np

coords = np.random.rand(M, N, 3) # Your sets of coordinates here
fixed  = np.random.rand(3)       # Fixed coordinate

distances = np.linalg.norm(coords - fixed, axis=2)
# shape (M, N) of distances

Другие вопросы по теме