趋近智
本课程已归档: 现已推出包含更新教学大纲和改进内容的新版本。
既然你已明白如何进行矩阵乘法,接下来我们看看这种运算的一些重要特点。与普通数字(标量)的乘法不同,矩阵乘法有一些独有的行为,你需要在处理机器学习公式时加以注意。
这可能是与标量乘法最主要的区别。对于标量 a 和 b,我们知道 ab=ba。然而,对于矩阵 A 和 B,通常情况下 AB=BA 不成立。
这主要有两个原因:
我们用一个NumPy示例来说明:
import numpy as np
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
# 计算 AB
AB = np.dot(A, B)
print("矩阵 A:\n", A)
print("\n矩阵 B:\n", B)
print("\n乘积 AB:\n", AB)
# 计算 BA
BA = np.dot(B, A)
print("\n乘积 BA:\n", BA)
# 检查它们是否相等
are_equal = np.array_equal(AB, BA)
print("\nAB 和 BA 是否相等?", are_equal)
执行此代码将输出:
矩阵 A:
[[1 2]
[3 4]]
矩阵 B:
[[5 6]
[7 8]]
乘积 AB:
[[19 22]
[43 50]]
乘积 BA:
[[23 34]
[31 46]]
AB 和 BA 是否相等? False
正如你所见,即使对于这些简单的2x2矩阵,AB 和 BA 也产生不同的结果。这种不满足交换律的特性是基本的。在矩阵方程中,务必注意乘法的顺序。
虽然矩阵相乘时 哪些 矩阵的顺序很重要,但只要顺序不变,分组方式则不影响结果。对于兼容的矩阵 A、B 和 C,结合律成立:
(AB)C=A(BC)这意味着你可以先计算 A 乘以 B,然后将结果乘以 C;或者你可以先计算 B 乘以 C,然后用 A 乘以该结果。最终得到的矩阵将是相同的。这一性质在计算和数学证明中大量使用,因为它允许在执行一系列矩阵乘法时有灵活的选择。
我们用NumPy来验证这一点:
import numpy as np
A = np.array([[1, 2]]) # 形状 (1, 2)
B = np.array([[3, 4],
[5, 6]]) # 形状 (2, 2)
C = np.array([[7],
[8]]) # 形状 (2, 1)
# 计算 (AB)C
AB = np.dot(A, B) # 形状 (1, 2)
ABC1 = np.dot(AB, C) # 形状 (1, 1)
print("矩阵 A:\n", A)
print("\n矩阵 B:\n", B)
print("\n矩阵 C:\n", C)
print("\n(AB)C:\n", ABC1)
# 计算 A(BC)
BC = np.dot(B, C) # 形状 (2, 1)
ABC2 = np.dot(A, BC) # 形状 (1, 1)
print("\nA(BC):\n", ABC2)
# 检查它们是否相等
are_equal = np.array_equal(ABC1, ABC2)
print("\n(AB)C 和 A(BC) 是否相等?", are_equal)
输出结果证实了它们是相同的:
矩阵 A:
[[1 2]]
矩阵 B:
[[3 4]
[5 6]]
矩阵 C:
[[7]
[8]]
(AB)C:
[[131]]
A(BC):
[[131]]
(AB)C 和 A(BC) 是否相等? True
矩阵乘法对矩阵加法和减法满足分配律,这与标量乘法类似。对于兼容的矩阵 A、B 和 C:
请记住,矩阵加法要求矩阵具有相同的维度。此性质对于推导中展开和简化矩阵表达式非常重要。
正如数字1是标量乘法的单位元(a×1=1×a=a)一样,矩阵乘法也存在一个单位矩阵,记作 I。单位矩阵 I 是一个方阵,其主对角线上是1,其余位置都是0。
对于任意维度为 m×n 的矩阵 A,乘以适当的单位矩阵会使 A 保持不变:
AIn=A ImA=A其中 In 是 n×n 单位矩阵,Im 是 m×m 单位矩阵。
import numpy as np
A = np.array([[1, 2, 3],
[4, 5, 6]]) # 形状 (2, 3)
# 用于右乘的单位矩阵 (3x3)
I_n = np.identity(3)
print("矩阵 A:
", A)
print("\n单位矩阵 I_n (3x3):
", I_n)
print("\nA * I_n:
", np.dot(A, I_n))
# 用于左乘的单位矩阵 (2x2)
I_m = np.identity(2)
print("\n单位矩阵 I_m (2x2):
", I_m)
print("\nI_m * A:
", np.dot(I_m, A))
The output will show that both A * I_n and I_m * A result in the original matrix A.
与标量乘法中 a×0=0 类似,将任意矩阵 A 乘以一个兼容的零矩阵(一个只包含零的矩阵,记作 0)会得到一个零矩阵:
A0=0 0A=0所得零矩阵的维度取决于矩阵 A 和所用零矩阵的维度。
一个重要的性质将矩阵乘法与转置运算关联起来。对于兼容的矩阵 A 和 B:
(AB)T=BTAT请注意,当转置应用于乘积时,顺序会颠倒。此性质在处理机器学习中的优化问题和导数时经常出现。
标量乘法与矩阵乘法的相互作用是可预测的。对于标量 c 和兼容的矩阵 A 和 B:
c(AB)=(cA)B=A(cB)你可以在进行矩阵乘法之前将标量与任一矩阵相乘,或者将矩阵乘法的结果乘以该标量。结果是相同的。
了解这些性质不仅对于正确执行计算很重要,而且对于处理机器学习算法中遇到的矩阵方程也很重要,例如线性回归、主成分分析(PCA)和神经网络。它们构成了线性代数语言的语法规则。
这部分内容有帮助吗?
numpy.dot 函数的官方文档,展示了 Python 中矩阵乘法的实现。© 2026 ApX Machine Learning用心打造