NumPy 对角矩阵

在线性代数中,对角矩阵是一个特殊的方阵,其非主对角线上的元素都为 0。对角矩阵具有以下性质:

  • 对角矩阵的转置等于自身。
  • 对角矩阵的行列式等于主对角线元素的乘积。
  • 对角矩阵的逆矩阵仍然是对角矩阵。

在 NumPy 中,创建对角矩阵的函数有以下 2 种。

  • numpy.diag()。
  • numpy.diagflat()。

numpy.diag() 创建对角矩阵

在 NumPy 中,我们可以使用 diag() 函数来创建对角矩阵或提取对角线。其中,numpy.diag() 支持 2 种操作:

  • 从一维数组创建对角矩阵。
  • 从二维数组提取对角线元素。

语法:

numpy.diag(arr, k=0)

说明:

diag() 函数接收以下 2 个参数。

  • arr(必选):是一个数组
    • 如果是一维数组,则生成对角矩阵。
    • 如果是二维数组,则提取指定对角线。
  • k(可选,默认:0):对角线偏移量。0(默认)表示主对角线,正值表示上对角线,负值表示下对角线。

示例 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],然后再创建一个以该一维数组为对角线元素的矩阵。

上一篇: NumPy 单位矩阵

下一篇: NumPy 矩阵相乘

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号