首页 > 解决方案 > 使用 Numpy 进行矩阵和张量乘法

问题描述

我正在尝试使用张量进行矩阵乘法,但我不确定如何使用 Numpy 进行。我一直在尝试与 合作np.tensordot(),但我无法做到

以更简单的方式,如果我们要进行矩阵乘法,并且我们有一个向量 v (Nx1) 和一个矩阵 S (NxN),我们可以进行运算

v^TS 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^TZM
,其中 (M^TZ) 产生 (5x3) 矩阵,M^TZM 产生 (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 做到这一点?

标签: pythonnumpy

解决方案


我认为这可以计算出你想要的:

import numpy as np

M = np.ones((3, 5))
Z = np.ones((5, 3, 3))
# Multiply (5, 1, 3) x (5, 3, 3) x (5, 3, 1)
result = (M.T[:, np.newaxis] @ Z @ M.T[:, :, np.newaxis]).squeeze()
print(result)

输出:

[9. 9. 9. 9. 9.]

为方便起见,我使用了该运算符,但如果您更喜欢它或使用较旧的 Python 版本@,可以将其替换为:np.matmul

result = np.matmul(np.matmul(M.T[:, np.newaxis], Z), M.T[:, :, np.newaxis]).squeeze()

推荐阅读