【发布时间】:2018-11-06 06:24:19
【问题描述】:
我正在尝试使用张量进行矩阵乘法,但我不确定如何使用 Numpy。我一直在尝试与np.tensordot() 合作,但我一直无法这样做
以更简单的方式,如果我们要进行矩阵乘法,并且我们有一个向量 v (Nx1) 和一个矩阵 S (NxN),我们可以进行运算
v^T S v => (1xN)(NxN)(Nx1) => 一个数字
v = np.ones((3,1))
S = np.ones((3,3))
y = v.T.dot(S).dot(v)
y.shape = (1) or ()
现在,我想做以下事情:
让矩阵 M (3x5) 和张量 Z (5x3x3) 让我可以拥有
M^T Z M
其中 (M^T Z) 产生一个 (5x3) 矩阵,而 M^T Z M 产生一个 (1x5) 向量
M = np.ones((3,5))
Z = np.ones((5,3,3))
Y = <?> M.T * Z * M <?>
Y.shape = (5,) or (1,5)
有谁知道如何在不使用 Tensorflow 的情况下使用 Numpy 做到这一点?
【问题讨论】:
-
你看过
np.einsum吗? -
dot的经验法则是 A 的最后一个暗色与 B 的第二个到最后一个暗色配对。为我们澄清一下,M(或M.T)的尺寸与Z和M中的哪一个。我可以猜到,但我认为你需要明确 -
我玩了一点
eigensum,得到了不同的结果,形状都是(1,5)或(5,)。我认为您应该说出您的预期结果或使用循环提供参考实现。