1 定义
由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵。记作:
这m×n 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数 aij为(i,j)元的矩阵可记为(aij)或(aij)m × n,m×n矩阵A也记作Amn。
元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵 。
2 基本运算
矩阵运算在科学计算中非常重要,而矩阵的基本运算包括矩阵的加法,减法,数乘,转置,共轭和共轭转置。
2.1 加、减法
例子:
矩阵的加、减法满足下列运算律(A,B,C都是同型矩阵):
注意的是只有同型矩阵之间才可以进行加减法。
代码实现:
import numpy as np
A = np.array([
[1, 4, 2],
[2, 0, 0]
])
B = np.array([
[0, 0, 5],
[7, 5, 0]
])
# 加法
print("A + B =\n", A + B)
# 减法
print("A - B =\n", A - B)
结果:
A + B =
[[1 4 7]
[9 5 0]]
A - B =
[[ 1 4 -3]
[-5 -5 0]]
2.2 数乘
矩阵的数乘满足以下运算律:
代码实现:
import numpy as np
C = np.array([
[1, 8, -3],
[4, -2, 5]
])
# 数乘
print("2 * C =\n", 2 * C)
结果:
2 * C =
[[ 2 16 -6]
[ 8 -4 10]]
2.3 点乘、点除
代码实现:
import numpy as np
A = np.array([
[-1, 4],
[2, 3]
])
B = np.array([
[3, 2],
[4, 5]
])
# 矩阵点乘
print("A * B =\n", A * B)
# 矩阵点除
print("A / B =\n", A / B)
结果:
A * B =
[[-3 8]
[ 8 15]]
A / B =
[[-0.33333333 2. ]
[ 0.5 0.6 ]]
2.4 转置
把矩阵A的行和列互相交换所产生的矩阵称为A的转置矩阵 ,这一过程称为矩阵的转置。
矩阵的转置满足以下运算律:
代码实现:
import numpy as np
D = np.array([
[2, 4, 3],
[0, -2, 8]
])
# 转置
print("D transpose\n", D.T)
print("D transpose\n", np.transpose(D))
结果:
D transpose
[[ 2 0]
[ 4 -2]
[ 3 8]]
D transpose
[[ 2 0]
[ 4 -2]
[ 3 8]]
2.5 逆矩阵
代码实现:
import numpy as np
D = np.array([
[2, 4],
[0, -2]
])
# 转置
print("D inv\n", np.linalg.inv(D))
结果:
D inv
[[ 0.5 1. ]
[-0. -0.5]
3 乘法
两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵
它的一个元素:
并将此乘积记为:C = AB
矩阵的乘法满足以下运算律:
结合律:(AB)C = A(BC)
左分配律:(A + B) = AC = BC
右分配律:C(A + B) = CA + CB
注:矩阵乘法不满足交换律。
代码实现:
import numpy as np
E = np.array([
[1, 0, 2],
[-1, 3, 1]
])
F = np.array([
[3, 1],
[2, 1],
[1, 0]
])
# 乘法
print("E * F =\n", E.dot(F))
print("E * F =\n", np.dot(E, F))
结果:
E * F =
[[5 1]
[4 2]]
E * F =
[[5 1]
[4 2]]
4 特征值与特征向量
n×n的方块矩阵A的一个特征值和对应特征向量是满足
的标量以及非零向量 [14] 。其中v为特征向量,λ为特征值。
A的所有特征值的全体,叫做A的谱,记为λ(A)。矩阵的特征值和特征向量可以揭示线性变换的深层特性 。
代码实现:
import numpy as np
G = np.array([
[-1, 4],
[2, 3]
])
# 特征值,特征向量
eigval, eigvec = np.linalg.eig(G)
print("G eig value:\n", eigval)
print('G eig vector:\n', eigvec)
# 直接求解特征值
eigval = np.linalg.eigvals(G)
print("G eig value:\n", eigval)
结果:
G eig value:
[-2.46410162 4.46410162]
G eig vector:
[[-0.9390708 -0.59069049]
[ 0.34372377 -0.80689822]]
G eig value:
[-2.46410162 4.46410162]
5 矩阵的迹
n×n矩阵A的对角元素之和称为矩阵A的迹(trace),记作tr(A),即
G = np.array([
[-1, 4],
[2, 3]
])
# 矩阵的迹
print("G trace:\n", np.trace(G))
结果:
G trace:
2