深入理解np.diag

发布时间:2023-05-24

一、介绍

NumPy是一个开源的Python科学计算库,它支持高维数组和矩阵运算。np.diag是NumPy中的一个函数,可以用来创建对角矩阵、获取对角线元素、构建对角线数组等。

二、np.diag的基本用法

np.diag的基本用法可以分为两种情况:

  1. 创建对角矩阵。对于给定的一维数组,np.diag返回一个由该数组表示的对角矩阵,其他元素均为零。
import numpy as np
arr = np.array([1, 2, 3])
print(np.diag(arr))

输出结果为:

[[1 0 0]
 [0 2 0]
 [0 0 3]]
  1. 获取对角线元素。对于给定的二维数组,np.diag返回一个以该数组的对角线为元素的一维数组。
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.diag(arr))

输出结果为:

[1 5 9]

三、np.diag创建不同种类的对角矩阵

np.diag不仅用于创建普通的对角矩阵,还可以创建不同种类的对角矩阵:

  1. 创建反对角矩阵。反对角矩阵是对角线上元素相等,其他元素均为零的矩阵。np.diag的第二个参数k可以用来控制对角线的位置,k>0表示对角线向右偏移k个位置,k<0表示对角线向左偏移-k个位置,k=0表示对角线在左上角。
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.diag(arr, k=2))

输出结果为:

[0 0 1 0 0 0 0 0 0]
  1. 创建单位矩阵。单位矩阵是对角线上元素均为1,其他元素均为零的矩阵。
print(np.diag(np.ones(5)))

输出结果为:

[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]

四、np.diag的其他用法

np.diag还有一些其他的用法:

  1. 将一维数组转换为二维对角矩阵。如果输入参数是一维数组,np.diag会返回一个与该数组对应的二维对角矩阵。
print(np.diag([1, 2, 3]))

输出结果为:

[[1 0 0]
 [0 2 0]
 [0 0 3]]
  1. 将二维数组的对角线元素替换为给定的一维数组。如果第二个参数是一个一维数组,np.diag会将该数组的元素替换二维数组的对角线元素。
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.diag(np.array([10, 11, 12]), k=1))

输出结果为:

[[ 0 10  0  0  0]
 [ 0  0 11  0  0]
 [ 0  0  0 12  0]
 [ 0  0  0  0  0]
 [ 0  0  0  0  0]]

五、总结

np.diag是NumPy中非常实用的函数,可以用来创建对角矩阵、获取对角线元素、构建对角线数组等。本文介绍了np.diag的基本用法,以及如何创建不同种类的对角矩阵和其他用法。掌握np.diag的各种用法可以在NumPy中进行更加高效和方便的矩阵操作。