数字1在普通乘法中作为乘法单位元。如果将任何数字乘以1,结果仍是该数字。例如,5×1=5 和 1×(−3)=−3。这个属性使得数字1成为标量乘法的乘法单位元。
线性代数中,矩阵乘法也有类似思想。有一个特殊的矩阵,它的行为与数字1相似。当你用这个特殊矩阵乘以另一个矩阵时,原矩阵保持不变。这个特殊矩阵被称为单位矩阵,通常用I表示。
什么是单位矩阵?
单位矩阵I始终是一个方阵,这意味着它的行数和列数相等。它有非常明确的结构:
- 它的主对角线(从左上角到右下角的对角线)上的元素是1。
- 主对角线之外的所有其他元素都是0。
以下是一些例子:
2×2单位矩阵,有时写作I2:
I2=[1001]
3×3单位矩阵,I3:
I3=100010001
更大的方阵以此类推。下标(如I2中的'2')表示方阵的大小(n×n)。通常,大小可以从矩阵乘法的背景中清楚看出,因此我们可能只写I。
矩阵乘法中的单位元性质
单位矩阵I的基本性质是,对于任何矩阵A,只要乘法有定义(即维度兼容),以下关系成立:
AI=A
且
IA=A
让我们看一个简单例子。考虑矩阵A:
A=[2435]
现在,将A乘以2×2单位矩阵I2:
AI2=[2435][1001]
如果我们逐步进行矩阵乘法:
- 左上角元素:(2×1)+(3×0)=2+0=2
- 右上角元素:(2×0)+(3×1)=0+3=3
- 左下角元素:(4×1)+(5×0)=4+0=4
- 右下角元素:(4×0)+(5×1)=0+5=5
结果矩阵是:
AI2=[2435]=A
你可以按另一种顺序进行乘法,I2A,并验证结果也是A。单位矩阵I在矩阵乘法中作为中性元素,非常类似于数字1在标量乘法中的作用。
为什么这对于解Ax=b很重要
让我们回顾一个简单的标量方程,例如5x=10。你如何求解x?你将方程两边乘以5的乘法逆元(或倒数),即1/5:
(1/5)×5x=(1/5)×10
这会简化,因为(1/5)×5=1:
1x=2
且由于1x就是x:
x=2
重要的步骤是乘以逆元(1/5),使x的系数变为1(乘法单位元),从而分离出x。
当我们希望解Ax=b形式的矩阵方程时,单位矩阵I也扮演类似的角色。目标通常是分离出向量 (vector)x。如果我们能找到一个特殊的矩阵,我们称之为A−1(读作“A逆”),它具有A−1A=I的性质,那么我们就可以将方程Ax=b两边乘以这个A−1矩阵(从左侧):
A−1(Ax)=A−1b
利用矩阵乘法的结合律,我们可以重新组合左侧:
(A−1A)x=A−1b
现在,由于我们选择了A−1,使得A−1A=I:
Ix=A−1b
最后,就像1x=x一样,将单位矩阵I乘以向量x会使向量保持不变(Ix=x):
x=A−1b
这种代数操作表明,如果我们能找到这个“逆”矩阵A−1,我们就有办法找到解向量x。单位矩阵I是这个原理的依据,它表示原矩阵A的作用已被抵消,从而使x被分离。我们将在下一节讨论这个逆矩阵A−1。
在NumPy中创建单位矩阵
NumPy通过numpy.eye(n)函数使得创建单位矩阵变得简单直接,该函数会生成一个n×n的单位矩阵。
import numpy as np
# 创建一个2x2单位矩阵
I2 = np.eye(2)
print("2x2 单位矩阵:")
print(I2)
# 创建一个4x4单位矩阵
I4 = np.eye(4)
print("\n4x4 单位矩阵:")
print(I4)
# 创建一个整数类型的3x3单位矩阵
I3_int = np.eye(3, dtype=int)
print("\n3x3 整数单位矩阵:")
print(I3_int)
执行这段代码将输出:
2x2 单位矩阵:
[[1. 0.]
[0. 1.]]
4x4 单位矩阵:
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
3x3 整数单位矩阵:
[[1 0 0]
[0 1 0]
[0 0 1]]
请注意,NumPy默认通常使用浮点数(例如1.和0.)。如果你需要特定地使用整数或其他类型,可以通过dtype参数 (parameter)指定数据类型,如第三个例子所示。
了解了单位矩阵及其类似于数字1的作用后,我们就可以讨论矩阵逆A−1,以及它如何帮助解决线性方程组。