📜  NumPy – 3D 矩阵乘法

📅  最后修改于: 2022-05-13 01:55:38.505000             🧑  作者: Mango

NumPy – 3D 矩阵乘法

3D 矩阵只不过是许多 2D 矩阵的集合(或堆栈),就像 2D 矩阵是许多 1D 向量的集合/堆栈一样。因此,3D 矩阵的矩阵乘法涉及 2D 矩阵的多次乘法,最终归结为它们的行/列向量之间的点积。

让我们考虑一个形状为 (3,3,2) 的示例矩阵 A 乘以另一个形状为 (3,2,4) 的 3D 矩阵 B。

Python
import numpy as np
  
np.random.seed(42)
  
A = np.random.randint(0, 10, size=(3, 3, 2))
B = np.random.randint(0, 10, size=(3, 2, 4))
  
print("A:\n{}, shape={}\nB:\n{}, shape={}".format(
  A, A.shape, B, B.shape))


Python
C = np.matmul(A, B)
  
print("Product C:\n{}, shape={}".format(C, C.shape))


输出:

第一个矩阵是由三个形状为 (3,2) 的 2D 矩阵组成的堆栈,第二个矩阵是由 3 个 2D 矩阵组成的堆栈,每个矩阵的形状为 (2,4)。

这两者之间的矩阵乘法将涉及分别具有形状 (3,2) 和 (2,4) 的 A 和 B 的相应二维矩阵之间的三个乘法。具体来说,第一次乘法将在 A[0] 和 B[0] 之间,第二次乘法将在 A[1] 和 B[1] 之间,最后第三次乘法将在 A[2] 和 B[ 2]。二维矩阵的每个单独乘法的结果将是形状 (3,4)。因此,两个 3D 矩阵的最终乘积将是形状为 (3,3,4) 的矩阵。

让我们使用代码来实现这一点。

Python

C = np.matmul(A, B)
  
print("Product C:\n{}, shape={}".format(C, C.shape))

输出: