numpy.linalg.diagonal#

linalg.diagonal(x, /, *, offset=0)[源代码]#

返回矩阵(或矩阵堆栈)``x`` 的指定对角线.

这个函数与 Array API 兼容,与 numpy.diagonal 不同,矩阵被假定为由最后两个维度定义.

参数:
x(…,M,N) array_like

具有形状 (…, M, N) 的输入数组,其最内层的两个维度形成 MxN 矩阵.

offsetint, 可选

偏移量指定相对于主对角线的非对角线位置,其中:

* offset = 0: the main diagonal.
* offset > 0: off-diagonal above the main diagonal.
* offset < 0: off-diagonal below the main diagonal.
返回:
out(…,min(N,M)) ndarray

一个包含对角线的数组,其形状通过移除最后两个维度并附加一个等于结果对角线大小的维度来确定.返回的数组必须与 x 具有相同的数据类型.

示例

>>> a = np.arange(4).reshape(2, 2); a
array([[0, 1],
       [2, 3]])
>>> np.linalg.diagonal(a)
array([0, 3])

一个三维示例:

>>> a = np.arange(8).reshape(2, 2, 2); a
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> np.linalg.diagonal(a)
array([[0, 3],
       [4, 7]])

通过使用 offset 参数,可以获得与主对角线相邻的对角线:

>>> a = np.arange(9).reshape(3, 3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> np.linalg.diagonal(a, offset=1)  # First superdiagonal
array([1, 5])
>>> np.linalg.diagonal(a, offset=2)  # Second superdiagonal
array([2])
>>> np.linalg.diagonal(a, offset=-1)  # First subdiagonal
array([3, 7])
>>> np.linalg.diagonal(a, offset=-2)  # Second subdiagonal
array([6])

反对角线可以通过使用 numpy.flipudnumpy.fliplr 反转元素的顺序来获得.

>>> a = np.arange(9).reshape(3, 3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> np.linalg.diagonal(np.fliplr(a))  # Horizontal flip
array([2, 4, 6])
>>> np.linalg.diagonal(np.flipud(a))  # Vertical flip
array([6, 4, 2])

请注意,对角线的检索顺序会根据翻转函数而变化.