零矩阵、单位矩阵和对角矩阵是矩阵的几种基本类型。使用NumPy创建这些矩阵非常直接简单。NumPy将矩阵表示为二维数组。首先,请确保已导入NumPy,通常使用标准别名 np:import numpy as np创建基本矩阵创建矩阵最基本的方法是利用Python的列表的列表。每个内部列表代表一行。# 创建一个3x4矩阵(3行,4列) my_list = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ] matrix_a = np.array(my_list) print("矩阵A(来自列表的列表):") print(matrix_a) print("矩阵A的形状:", matrix_a.shape) print("矩阵A的数据类型:", matrix_a.dtype)运行此代码将输出:矩阵A(来自列表的列表): [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] 矩阵A的形状: (3, 4) 矩阵A的数据类型: int64请注意NumPy是如何自动确定形状 (3, 4) 和数据类型(可能是 int64 或 int32,具体取决于您的系统)。创建零矩阵零矩阵,表示为 $O$,只包含零。它们常被用作初始占位符。NumPy提供了 np.zeros() 函数。您需要以元组(行数,列数)的形式提供所需的形状。# 创建一个2x3零矩阵 rows = 2 cols = 3 zero_mat = np.zeros((rows, cols)) print("\n零矩阵 (2x3):") print(zero_mat) print("形状:", zero_mat.shape) print("数据类型:", zero_mat.dtype) # 默认为float64输出:零矩阵 (2x3): [[0. 0. 0.] [0. 0. 0.]] 形状: (2, 3) 数据类型: float64默认情况下,np.zeros() 创建浮点数。如果您需要整数,请指定 dtype:# 创建一个3x3的整数零矩阵 zero_mat_int = np.zeros((3, 3), dtype=int) print("\n零矩阵 (3x3, 整数):") print(zero_mat_int) print("数据类型:", zero_mat_int.dtype)输出:零矩阵 (3x3, 整数): [[0 0 0] [0 0 0] [0 0 0]] 数据类型: int64创建单位矩阵单位矩阵 $I$ 是一个方阵(行数和列数相同),其主对角线上是1,其余位置是0。它在矩阵乘法中作用如同数字1。NumPy为此提供了两个常用函数:np.identity() 和 np.eye()。np.identity(n) 创建一个 $n \times n$ 的单位矩阵。# 使用np.identity()创建一个4x4单位矩阵 identity_mat = np.identity(4) print("\n单位矩阵 (4x4),使用np.identity():") print(identity_mat) print("形状:", identity_mat.shape) print("数据类型:", identity_mat.dtype) # 默认为float64输出:单位矩阵 (4x4),使用np.identity(): [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] 形状: (4, 4) 数据类型: float64np.eye(N, M=None, k=0) 更具通用性。它创建一个 $N \times M$ 矩阵(如果省略 $M$,则 $M=N$,创建方阵)。参数 $k$ 指定对角线:$k=0$ 是主对角线(默认),$k>0$ 在主对角线上方,而 $k<0$ 在主对角线下方。对于标准单位矩阵,通常只需提供 $N$。# 使用np.eye()创建一个3x3单位矩阵 identity_mat_eye = np.eye(3) print("\n单位矩阵 (3x3),使用np.eye():") print(identity_mat_eye) # 创建一个3x5矩阵,主对角线上为1 eye_mat_rect = np.eye(3, 5) print("\n矩形矩阵 (3x5),使用np.eye():") print(eye_mat_rect) # 创建一个4x4矩阵,主对角线上方对角线上为1 (k=1) eye_mat_k1 = np.eye(4, k=1) print("\n矩阵 (4x4),使用np.eye(k=1):") print(eye_mat_k1)输出:单位矩阵 (3x3),使用np.eye(): [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] 矩形矩阵 (3x5),使用np.eye(): [[1. 0. 0. 0. 0.] [0. 1. 0. 0. 0.] [0. 0. 1. 0. 0.]] 矩阵 (4x4),使用np.eye(k=1): [[0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.] [0. 0. 0. 0.]]对于创建标准单位矩阵,np.identity(n) 可能稍微更清晰,但 np.eye(n) 同样适用。创建对角矩阵对角矩阵只在主对角线上有非零元素。NumPy的 np.diag() 函数用途广泛。它可以从现有矩阵中提取对角线,或从一维数组(或列表)中构建一个方对角矩阵。1. 构建对角矩阵: 如果您向 np.diag() 提供一个一维数组(例如向量),它会创建一个方阵,其中数组的元素成为主对角线上的值。# 定义对角线元素 diagonal_values = [2, 5, -1, 3] # 从这些值创建对角矩阵 diag_mat = np.diag(diagonal_values) print("\n由[2, 5, -1, 3]构建的对角矩阵:") print(diag_mat) print("形状:", diag_mat.shape)输出:由[2, 5, -1, 3]构建的对角矩阵: [[ 2 0 0 0] [ 0 5 0 0] [ 0 0 -1 0] [ 0 0 0 3]] 形状: (4, 4)2. 提取对角线: 如果您向 np.diag() 提供一个二维数组(一个矩阵),它会提取主对角线上的元素,并将其作为一维数组返回。# 使用我们之前创建的matrix_a print("\n原始矩阵A:") print(matrix_a) # 从matrix_a中提取主对角线 diagonal_extracted = np.diag(matrix_a) print("\n从矩阵A中提取的对角线:") print(diagonal_extracted) print("形状:", diagonal_extracted.shape)输出:原始矩阵A: [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] 从矩阵A中提取的对角线: [ 1 6 11] 形状: (3,)请注意,提取的对角线只包含行索引等于列索引的元素($a_{11}, a_{22}, a_{33}, ...$),直到矩阵的较小维度。这些函数(np.array、np.zeros、np.identity、np.eye、np.diag)提供了创建您将经常遇到的矩阵的基本工具。尝试使用不同的形状和数据类型,以便熟练掌握它们的用法。这个基础对于执行矩阵运算非常重要,我们将在下一章中介绍。