NumPy diag()

diag() 方法要么创建一个新的 ndarray,并将给定的 1D 数组作为其对角线元素,要么从给定的 ndarray 中提取对角线。

示例

import numpy as np

# create a 1D array
array1 = np.arange(3)

# create a 2D array
array2 = np.arange(9).reshape(3,3)

# create a 2D array with elements of arr1 as diagonal diagonalArray1 = np.diag(array1)
print('Array1:\n', array1) print('Array1 as diagonal elements:\n', diagonalArray1)
# extract diagonal elements from arr2 diagonalArray2 = np.diag(array2)
print('\nArray2\n', array2) print('Extract diagonal of Array2\n', diagonalArray2) ''' Array1: [0 1 2] Array1 as diagonal elements: [[0 0 0] [0 1 0] [0 0 2]] Array2 [[0 1 2] [3 4 5] [6 7 8]] Extract diagonal of Array2 [0 4 8] '''

diag() 语法

diag() 的语法是

numpy.diag(array, k = 0)

diag() 参数

diag() 方法接受以下参数

  • array - 输入数组(可以是 array_like
  • k(可选)- 一个整数,表示要检索的对角线

注意:

  • 默认情况下,k = 0,表示主对角线。
    • k > 0 表示主对角线上方的对角线
    • k < 0 表示主对角线以下的对角线。

diag() 返回值

diag() 方法要么返回一个新 ndarray,将 1D 数组中的值作为其对角线,要么返回一个包含给定 ndarray 对角线元素的 1D 数组。


示例 1:使用 1D 数组创建对角线数组

当一个 1D 数组被传递给 diag() 时,它会创建一个以给定数组作为对角线元素的对角线数组。

如前所述,我们可以使用 k 参数来控制结果数组中对角线元素的位置。

让我们看一个例子。

import numpy as np

# create a 1D array
array1 = np.arange(1, 4)

# create a 2D array with elements of array1 as the main diagonal mainDiagonal = np.diag(array1) # create a 2D array with elements of array1 as diagonal above the main diagonal upperDiagonal = np.diag(array1, k = 1) # create a 2D array with elements of array1 as diagonal below the main diagonal lowerDiagonal = np.diag(array1, k = -1)
print('Array1:\n',array1) print('Array1 as main diagonal elements:\n', mainDiagonal) print('Array1 as diagonal elements above main diagonal:\n', upperDiagonal) print('Array1 as diagonal elements below main diagonal:\n', lowerDiagonal)

输出

Array1:
[1 2 3]
Array1 as main diagonal elements:
 [[1 0 0]
 [0 2 0]
 [0 0 3]]
Array1 as diagonal elements above main diagonal:
 [[0 1 0 0]
 [0 0 2 0]
 [0 0 0 3]
 [0 0 0 0]]
Array1 as diagonal elements below main diagonal:
 [[0 0 0 0]
 [1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]]

示例 2:从 2D 数组提取对角线

当一个 2D 数组被传递给 diag() 时,它会创建一个 1D 数组,其中包含给定数组的对角线元素。

让我们看一个例子。

import numpy as np

# create a 2D array
array1 = np.arange(1, 10).reshape(3,3)

# create a 1D array with main diagonal as elements mainDiagonal = np.diag(array1) # create a 1D array with diagonal elements of arr1 one step above the main diagonal upperDiagonal = np.diag(array1, k = 1) # create a 1D array with diagonal elements of arr1 one step below the main diagonal lowerDiagonal = np.diag(array1, k = -1)
print('Array1:\n',array1) print('Array1\'s main diagonal elements:\n', mainDiagonal) print('Array1\'s diagonal elements above main diagonal:\n', upperDiagona ) print('Array1\'s diagonal elements below main diagonal:\n', lowerDiagonal)

输出

Array1:
[[1 2 3]
 [4 5 6]
 [7 8 9]]
Array1's main diagonal elements:
 [1 5 9]
Array1's diagonal elements above main diagonal:
 [2 6]
Array1's diagonal elements below main diagonal:
 [4 8]

相关方法

diagflat() - 创建一个二维数组,并将展平的输入作为其对角线。

import numpy as np

# create a 2D array
array1 = np.arange(1,5).reshape(2, 2)

# create diagonal array using diagflat() mainDiagonal1 = np.diagflat(array1) # create diagonal array using diag() mainDiagonal2 = np.diag(array1.flatten())
print('Array1:\n',array1) print('Array1\'s main diagonal elements:\n',mainDiagonal1) print('Equivalent diag method:\n',mainDiagonal2)

输出

Array1:
 [[1 2]
 [3 4]]
Array1's main diagonal elements:
 [[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]
Equivalent diag method:
 [[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]

正如您所看到的,diagflat() 自动展平了 2D 数组,并创建了一个以展平数组元素作为其对角线的数组。

diag() 的情况下,我们手动使用了 flatten() 方法。

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战