numpy.diagonal#

numpy.diagonal(a, offset=0, axis1=0, axis2=1)[原始碼]#

傳回指定的對角線。

如果 a 是 2 維陣列,則傳回 a 具有給定偏移量的對角線,即形式為 a[i, i+offset] 的元素集合。如果 a 具有兩個以上的維度,則由 axis1axis2 指定的軸用於確定要傳回其對角線的 2 維子陣列。結果陣列的形狀可以通過移除 axis1axis2 並在右側附加一個索引(等於結果對角線的大小)來確定。

在 NumPy 1.7 之前的版本中,此函數始終傳回一個新的、獨立的陣列,其中包含對角線中值的副本。

在 NumPy 1.7 和 1.8 中,它繼續傳回對角線的副本,但依賴於此事實已被棄用。寫入結果陣列的操作方式與以前相同,但會發出 FutureWarning 警告。

從 NumPy 1.9 開始,它傳回原始陣列的唯讀視圖。嘗試寫入結果陣列將產生錯誤。

在未來的某些版本中,它將傳回讀/寫視圖,並且寫入傳回的陣列將會更改您的原始陣列。傳回的陣列將與輸入陣列具有相同的類型。

如果您不寫入此函數傳回的陣列,則可以忽略以上所有內容。

如果您依賴目前的行為,那麼我們建議明確複製傳回的陣列,即使用 np.diagonal(a).copy() 而不是僅僅使用 np.diagonal(a)。這將適用於 NumPy 的過去和未來版本。

參數:
aarray_like

从中提取對角線的陣列。

offsetint,選用

對角線相對於主對角線的偏移量。可以是正數或負數。預設為主對角線 (0)。

axis1int,選用

用作要从中提取對角線的 2 維子陣列的第一軸。預設為第一軸 (0)。

axis2int,選用

用作要从中提取對角線的 2 維子陣列的第二軸。預設為第二軸 (1)。

傳回值:
array_of_diagonalsndarray

如果 a 是 2 維陣列,則傳回一個 1 維陣列,其中包含對角線,且類型與 a 相同,除非 amatrix,在這種情況下,為了保持向後相容性,傳回的是 1 維陣列而不是 (2 維) matrix

如果 a.ndim > 2,則移除由 axis1axis2 指定的維度,並在末尾插入一個對應於對角線的新軸。

引發:
ValueError

如果 a 的維度小於 2。

另請參閱

diag

適用於 1 維和 2 維陣列的 MATLAB 類似函數。

diagflat

建立對角陣列。

trace

沿對角線求和。

範例

>>> import numpy as np
>>> a = np.arange(4).reshape(2,2)
>>> a
array([[0, 1],
       [2, 3]])
>>> a.diagonal()
array([0, 3])
>>> a.diagonal(1)
array([1])

3 維範例

>>> a = np.arange(8).reshape(2,2,2); a
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> a.diagonal(0,  # Main diagonals of two arrays created by skipping
...            0,  # across the outer(left)-most axis last and
...            1)  # the "middle" (row) axis first.
array([[0, 6],
       [1, 7]])

我們剛剛獲得其主對角線的子陣列;請注意,每個子陣列都對應於固定最右邊的(列)軸,並且對角線「緊密排列」在行中。

>>> a[:,:,0]  # main diagonal is [0 6]
array([[0, 2],
       [4, 6]])
>>> a[:,:,1]  # main diagonal is [1 7]
array([[1, 3],
       [5, 7]])

反對角線可以通過使用 numpy.flipudnumpy.fliplr 反轉元素順序來獲得。

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

請注意,對角線的檢索順序會根據翻轉函數而變化。