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()
方法。