【发布时间】:2018-12-05 03:40:44
【问题描述】:
假设我不想在某个域上绘制二维高斯函数
其中 A=1,其中 sigma 是一个 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),我想要一个形状为(size, size) 的结果矩阵r,其中每个条目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) 形状,所以有些地方我做错了。
如何将这样的矢量计算应用于张量结构?
【问题讨论】:
-
np.vectorize在这里不好;它将标量值传递给您的函数。您想传递 1 或 2d 数组。在这里,您正在做dot产品,ij维度为'going-along-for-the-ride'。tensordot做的不对。matmul(@) 可以,但einsum更容易正确调用。
标签: python numpy linear-algebra gaussian tensor