NumPy 线性代数学习笔记
1. 矩阵基础
1.1 创建矩阵
在 NumPy 中,可以使用 numpy.array
方法创建一个矩阵。例如,要创建一个 2x3 的矩阵,可以执行以下代码:
pythonCopy Codeimport numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
输出如下:
Copy Code[[1 2 3]
[4 5 6]]
1.2 取矩阵的行列
要取矩阵的某一行或某一列,可以使用 :
符号进行切片操作。例如,要取矩阵 a
的第 2 行和第 3 列,可以执行以下代码:
pythonCopy Coderow = a[1, :] # 取第 2 行
col = a[:, 2] # 取第 3 列
print(row)
print(col)
输出如下:
Copy Code[4 5 6]
[3 6]
2. 矩阵运算
2.1 矩阵加法
两个矩阵相加,要求这两个矩阵的维度相同。例如,要计算矩阵 a
和矩阵 b
的和,可以执行以下代码:
pythonCopy Codea = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9], [10, 11, 12]])
c = a + b
print(c)
输出如下:
Copy Code[[ 8 10 12]
[14 16 18]]
2.2 矩阵乘法
两个矩阵相乘,要求第一个矩阵的列数等于第二个矩阵的行数。例如,要计算矩阵 a
和矩阵 b
的积,可以执行以下代码:
pythonCopy Codea = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = np.dot(a, b)
print(c)
输出如下:
Copy Code[[19 22]
[43 50]]
3. 矩阵分解
3.1 SVD 分解
SVD(奇异值分解)是一种常用的矩阵分解方法。在 NumPy 中,可以使用 numpy.linalg.svd
方法进行 SVD 分解。例如,要对矩阵 a
进行 SVD 分解,可以执行以下代码:
pythonCopy Codea = np.array([[1, 2], [3, 4], [5, 6]])
u, s, vt = np.linalg.svd(a)
print(u)
print(s)
print(vt)
输出如下:
Copy Code[[-0.2298477 -0.88346102 -0.40824829]
[-0.52474482 -0.24078249 0.81649658]
[-0.81964194 0.40189604 -0.40824829]]
[9.52551809 0.51430058]
[[-0.61962948 -0.78489445]
[-0.78489445 0.61962948]]
3.2 QR 分解
QR 分解是一种将矩阵分解为正交矩阵和上三角矩阵的方法。在 NumPy 中,可以使用 numpy.linalg.qr
方法进行 QR 分解。例如,要对矩阵 a
进行 QR 分解,可以执行以下代码:
pythonCopy Codea = np.array([[1, 2], [3, 4], [5, 6]])
q, r = np.linalg.qr(a)
print(q)
print(r)
输出如下:
Copy Code[[-0.16903085 0.89708523 -0.40824829]
[-0.50709255 0.27602622 0.81649658]
[-0.84515425 -0.34503278 -0.40824829]]
[[-5.91607978 -7.43735744]
[ 0. -0.82807867]]