NumPy 线性代数学习笔记

1. 矩阵基础

1.1 创建矩阵

在 NumPy 中,可以使用 numpy.array 方法创建一个矩阵。例如,要创建一个 2x3 的矩阵,可以执行以下代码:

pythonCopy Code
import 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 Code
row = a[1, :] # 取第 2 行 col = a[:, 2] # 取第 3 列 print(row) print(col)

输出如下:

Copy Code
[4 5 6] [3 6]

2. 矩阵运算

2.1 矩阵加法

两个矩阵相加,要求这两个矩阵的维度相同。例如,要计算矩阵 a 和矩阵 b 的和,可以执行以下代码:

pythonCopy Code
a = 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 Code
a = 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 Code
a = 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 Code
a = 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]]