Numpy: Как правильно выполнять точечные произведения над тензорами - PullRequest
0 голосов
/ 05 декабря 2018

Скажем, я не хочу строить 2D гауссову функцию в некоторой области

enter image description here

с A = 1, где сигма - матрица 2x2и x, mu 2-мерные векторы:

base = np.linspace(-1, 1, size)
x = np.array(np.meshgrid(base, base))
mu = np.array([x_0, x_1])
sigma = np.array([[a, b],
                  [b, c]])

У меня есть x, форма которого (2, size, size), и я хочу получить результирующую матрицу r формы (size, size), где каждая запись r[i,j] соответствуетна f(x[:,i,j]).

Моя первая попытка была np.vectorize функцией, но это не тривиально без отдельной обработки матриц сетки, и я прочитал функции векторизации не лучшее решение с точки зрения производительности.Потом я обнаружил np.tensordot, но выполнение

cent = x.T - mu
np.tensordot(cent, np.tensordot(sigma, cent, axes=[0, 2]), axes=[2, 0]).shape

дает форму (size, size, size, size), поэтому есть кое-что, что я не понимаю.

Как можно применить векторное вычисление, подобное этомунад тензорной структурой?

1 Ответ

0 голосов
/ 05 декабря 2018

np.einsum это один из вариантов:

np.einsum('jki,il,jkl->jk', cent, sigma, cent)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...