Чистое питоническое попарное евклидово расстояние строк numpy ndarray

У меня есть матрица размера (n_classes, n_features), и я хочу вычислить попарное евклидово расстояние каждой пары классов, чтобы на выходе была матрица (n_classes, n_classes), где каждая ячейка имеет значение euclidean_distance (class_i, class_j) .

Я знаю, что есть эти scipy пространственные расстояния (http://docs.scipy.org/doc/scipy-0.14.0/reference/spatial.distance.html) и sklearn.metric.euclidean расстояния (http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.euclidean_distances.html), но я хочу использовать это в программном обеспечении Theano, поэтому мне нужна чистая математическая формула, а не функции, вычисляющие результаты.

например, мне нужна серия преобразований, таких как A = X * B, D = X.T-X, results = D.T, что-то, что содержит только матричные математические операции, а не функции.


person Ash    schedule 27.10.2014    source источник
comment
Возможный дубликат stackoverflow.com/questions/25886374/pdist-for- теано-тензор ?   -  person eickenberg    schedule 28.10.2014
comment
Да, спасибо, это дубликат.   -  person Ash    schedule 29.10.2014


Ответы (1)


Вы можете сделать это, используя широковещательную рассылку numpy, как показано в этой сути. Должно быть просто преобразовать это в код Theano или просто сослаться на комментарий @eickenberg выше, так как именно он показал мне, как это сделать!

person Kyle Kastner    schedule 28.10.2014
comment
Я также нашел этот код, который делает то же самое. Спасибо Кайл. - person Ash; 29.10.2014
comment
+1 :) - если я правильно понял вашу суть, в np.exp(-(x1[np.newaxis, :, :] - x2[:, np.newaxis, :])[:, :, 0] ** 2).T вы, кажется, собираете только расстояние по первой координате. Разве ты не хочешь np.exp(-((x1[np.newaxis, :, :] - x2[:, np.newaxis, :]) ** 2).sum(2)).T ? - person eickenberg; 29.10.2014
comment
Да... похоже на ошибку. Все функции должны иметь значение :) - person Kyle Kastner; 29.10.2014