在线性代数中,对角矩阵是一个特殊的方阵,其非主对角线上的元素都为 0。对角矩阵具有以下性质:
- 对角矩阵的转置等于自身。
- 对角矩阵的行列式等于主对角线元素的乘积。
- 对角矩阵的逆矩阵仍然是对角矩阵。
在 NumPy 中,创建对角矩阵的函数有以下 2 种。
- numpy.diag()。
- numpy.diagflat()。
numpy.diag() 创建对角矩阵
在 NumPy 中,我们可以使用 diag() 函数来创建对角矩阵或提取对角线。其中,numpy.diag() 支持 2 种操作:
- 从一维数组创建对角矩阵。
- 从二维数组提取对角线元素。
语法:
numpy.diag(arr, k=0)说明:
diag() 函数接收以下 2 个参数。
示例 1:从一维数组创建对角矩阵
import numpy as np
arr1 = np.diag([1, 2, 3])
arr2 = np.diag([1, 2, 3], k=1) # 上对角线偏移 1
print(arr1)
print(arr2)运行结果如下。
[[1 0 0]
[0 2 0]
[0 0 3]]
[[0 1 0 0]
[0 0 2 0]
[0 0 0 3]
[0 0 0 0]]分析:
在这个例子中,np.diag([1, 2, 3]) 表示创建了一个 3×3 的矩阵,其主对角线(k=0)上的元素是 [1, 2, 3]。
而 np.diag([1, 2, 3], k=1) 表示创建了一个 4×4 的矩阵,其上对角线(偏移量为 1)上的元素是 [1, 2, 3]。
示例 2:从二维数组提取对角线
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 提取主对角线
main_diag = np.diag(arr)
# 提取上对角线
upper_diag = np.diag(arr, k=1)
print('主对角线:', main_diag)
print('上对角线:', upper_diag)运行结果如下。
主对角线:[1 5 9]
上对角线:[2 6]分析:
np.diag(arr) 表示从二维数组 arr 中提取主对角线元素,也就是:[1, 5, 9]。
np.diag(arr, k=1) 表示从二维数组 arr 中提取上对角线(偏移量为 1)的元素,也就是:[2, 6]。
numpy.diagflat() 创建对角矩阵
在 NumPy 中,我们还可以使用 diagflat() 函数来创建一个对角矩阵。diagflat() 函数会始终创建对角矩阵,且自动展平输入数据到主对角线。
语法:
numpy.diagflat(arr, k=0)说明:
diagflat() 函数接受以下 2 个参数。
arr(必选):任意形状的数组(会自动展平为一维)。k(可选,默认:0):对角线偏移量。0(默认)表示主对角线,正值表示上对角线,负值表示下对角线。
diag() 和 diagflat() 这 2 个函数的主要区别在于:
- 对于二维数组来说:diag() 会提取对角线,而 diagflat() 是展平后创建对角矩阵。
- 对于高维数组来说:diag() 不会展平,而 diagflat() 会展平所有维度到一维。
示例 3:numpy.diagflat() 基本用法
import numpy as np
arr = np.diagflat([[1, 2], [3, 4]])
print(arr)运行结果如下。
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]分析:
numpy.diagflat([[1, 2], [3, 4]]) 会先将 [[1, 2], [3, 4]] 展平为 [1, 2, 3, 4],然后再创建一个以该一维数组为对角线元素的矩阵。
