Скажем, я не хочу строить 2D гауссову функцию в некоторой области
с 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)
, поэтому есть кое-что, что я не понимаю.
Как можно применить векторное вычисление, подобное этомунад тензорной структурой?