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])

3-D 範例

>>> 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])

請注意,檢索對角線的順序會根據翻轉函數而有所不同。