NumPy 3D矩阵乘法
三维矩阵只不过是许多二维矩阵的集合(或堆栈),就像二维矩阵是许多一维向量的集合/堆栈一样。因此,三维矩阵的矩阵乘法涉及多个二维矩阵的乘法,最终归结为行/列向量之间的点乘。
让我们考虑一个形状为(3,3,2)的矩阵A与另一个形状为(3,2,4)的三维矩阵B相乘的例子。
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))
OUTPUT:
第一个矩阵是三个二维矩阵的堆叠,每个矩阵的形状为(3,2),第二个矩阵是三个二维矩阵的堆叠,每个矩阵的形状为(2,4)。
这两者之间的矩阵乘法将涉及到A和B的相应二维矩阵之间的三次乘法,其形状分别为(3,2)和(2,4)。具体来说,第一次乘法将在A[0]和B[0]之间进行,第二次乘法将在A[1]和B[1]之间进行,最后,第三次乘法将在A[2]和B[2]之间进行。二维矩阵的每个单独的乘法结果将是(3,4)的形状。因此,两个三维矩阵的最终产物将是一个形状为(3,3,4)的矩阵。
让我们用代码来实现这一点。
C = np.matmul(A, B)
print("Product C:\n{}, shape={}".format(C, C.shape))
输出: