Векторизованное пространственное расстояние между значениями в многомерных массивах - PullRequest
0 голосов
/ 12 сентября 2018

Учитывая массив (2,2,3,3,3) трехмерных декартовых координат по последнему измерению, каков синтаксис для вычисления евклидова между попарно значениями в XA и XB с использованием scipy.spatial.distance.cdist для получения выходного массива с формой (2, 3, 3)?

XA = np.random.normal(size=(2,2,3,3,3))
XB = np.random.normal(size=(2,2,3,3,3))
dist = cdist(XA[:, 0, ...], XB[:, 1, ...], 'seuclidean')

Возвращает ValueError: XA must be a 2-dimensional array. Таким образом, альтернатива циклам - каков питонический синтаксис для вычисления cdist(XA[:, 0], XB[:, 1])?

1 Ответ

0 голосов
/ 12 сентября 2018

Это делает работу?если нужны только попарные расстояния, а координаты находятся в последнем измерении:

import numpy as np

XA = np.random.normal(size=(2,2,3,3,3))
XB = np.random.normal(size=(2,2,3,3,3))

distances = np.sqrt(np.sum((XA - XB)**2, axis=-1))

, но здесь distances.shape равно (2, 2, 3, 3) ...

...