趋近智
本课程已归档: 现已推出包含更新教学大纲和改进内容的新版本。
零矩阵、单位矩阵和对角矩阵是矩阵的几种基本类型。使用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×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)
数据类型: float64
np.eye(N, M=None, k=0) 更具通用性。它创建一个 N×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,)
请注意,提取的对角线只包含行索引等于列索引的元素(a11,a22,a33,...),直到矩阵的较小维度。
这些函数(np.array、np.zeros、np.identity、np.eye、np.diag)提供了创建您将经常遇到的矩阵的基本工具。尝试使用不同的形状和数据类型,以便熟练掌握它们的用法。这个基础对于执行矩阵运算非常重要,我们将在下一章中介绍。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造