Numpy diag() 函数
Numpy diag() 函数用于从矩阵(二维数组)中提取对角线元素,或从一维数组或列表创建对角线矩阵。此函数用于矩阵运算和数值计算。
numpy.diag() 函数有两种使用方式:
- 对于二维数组,该函数提取数组的对角线元素。
- 对于一维数组,该函数创建一个方阵,以一维数组的元素作为对角线值,其余位置补零。
语法
以下是 Numpy diag() 函数的语法 -
numpy.diag(array, k=0)
参数
以下是 Numpy 函数的参数diag() 函数 -
- array:表示输入数组(可以是类似数组的形式)
- k(可选):表示要检索的对角线的整数 -
- k>0 - 表示主对角线上方的对角线
- k<0 - 表示主对角线下方的对角线
返回值
该函数返回二维数组的对角线元素,或者当传入一维数组时,返回一个新的方阵二维数组(对角矩阵)。
示例
以下是使用 Numpy 从给定二维数组中提取对角线元素的基本示例diag() 函数 −
import numpy as np Matrix = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]]) print("原始数组: ", Matrix) Diagonal_elements = np.diag(Matrix) print("对角线元素:", Diagonal_elements)
输出
以下是上述代码的输出:
原始数组: [[10 20 30] [40 50 60] [70 80 90]] 对角线元素:[10 50 90]
示例:创建对角矩阵
当将一维数组传递给 numpy.diag() 函数时,它会创建一个方阵,其中数组元素位于主对角线上,其他位置为零。
在下面的示例中,我们创建了一个对角线给定一维数组,转换为对角矩阵 -
import numpy as np array = np.array([1, 2, 3, 4]) print("原始数组:",array) diagonal_matrix = np.diag(array) print("对角矩阵: ", diagonal_matrix)
输出
以下是上述代码的输出 -
原始数组:[1 2 3 4] 对角矩阵: [[1 0 0 0] [0 2 0 0] [0 0 3 0] [0 0 0 4]]
示例:指定对角线偏移
k 参数可用于指定要提取或设置的对角线。正值提取主对角线上方的对角线,负值提取主对角线下方的对角线。
'k' 为正整数
在以下示例中,我们提取了比主对角线高一级 (k=1) 的对角线元素 -
import numpy as np matrix = np.array([[11, 22, 33], [44, 55, 66], [77, 88, 99]]) print("原始数组: ",matrix) diagonal_above = np.diag(matrix, k=1) print("主对角线上方的对角线:", diagonal_above)
输出
以下是上述代码的输出 -
原始数组: [[11 22 33] [44 55 66] [77 88 99]] 对角线在主对角线上方:[22 66]
'k' 为负整数
在下面的示例中,我们创建了一个对角矩阵,其中对角线比主对角线低一级 (k=-1) -
import numpy as np array = np.array([[11, 22, 33], [44, 55, 66], [77, 88, 99]]) print("原始数组: ",array) diagonal_matrix_below = np.diag(array, k=-1) print("主对角线下方的对角矩阵:", diagonal_matrix_below)
输出
以下是上述代码的输出 -
原始数组: [[11 22 33] [44 55 66] [77 88 99]] 主对角线下方的对角矩阵:[44 88]
示例:指定不同的数据类型
我们可以通过设置在将数组传递给 numpy.diag() 之前,创建数组时需添加 dtype 属性。
在以下示例中,我们创建了一个 float 数据类型的对角矩阵 -
import numpy as np Float_array = np.array([10, 20, 30], dtype=float) Float_diagonal_matrix = np.diag(Float_array) print("浮点对角矩阵: ", Float_diagonal_matrix)
输出
浮点对角矩阵: [[10. 0. 0.] [ 0. 20. 0.] [ 0. 0. 30.]]
示例:为"k"传递浮点值
当我们为 k 参数提供非整数值或传递无效数据类型时,numpy.diag() 将引发 TypeError。
在以下示例中,我们将 k 值作为浮点数传递,这导致了错误 -
import numpy as np array = np.array([1, 2, 3]) # 这将引发 TypeError diagonal_matrix_float_k = np.diag(array, k=1.5) print(diagonal_matrix_float_k)
输出
Traceback (most recent call last): File "/home/cg/root/46524/main.py", line 4, in <module> diagonal_matrix_float_k = np.diag(array, k=1.5) File "<__array_function__ internals>", line 200, in diag File "/usr/local/lib/python3.10/dist-packages/numpy/lib/twodim_base.py", line 299, in diag res = zeros((n, n), v.dtype) TypeError: 'float' object cannot be interpreted as an integer
numpy_array_creation_routines.html