Numpy:如何在张量上正确执行点积

Numpy: How to properly perform dot products over tensors

假设我不想在某个域上绘制二维高斯函数

A=1,其中 sigma 是 2x2 矩阵,x, mu 二维向量:

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]])

我有一个形状为 (2, size, size)x,我想要一个形状为 (size, size) 的结果矩阵 r,其中每个条目 r[i,j] 对应于 f(x[:,i,j]).

我的第一次尝试是 np.vectorize 该函数,但如果不单独处理 meshgrid 的矩阵,它并不是微不足道的,而且我读过矢量化函数并不是性能方面的最佳解决方案。然后我发现np.tensordot,但是做

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

生成 (size, size, size, size) 形状,所以有些地方我没弄对。

如何将像这样的矢量计算应用于张量结构?

np.einsum 是一个选项:

np.einsum('jki,il,jkl->jk', cent, sigma, cent)