numpy.diagonal#
- numpy.diagonal(a, offset=0, axis1=0, axis2=1)[原始碼]#
傳回指定的對角線。
如果 a 是 2 維陣列,則傳回 a 具有給定偏移量的對角線,即形式為
a[i, i+offset]
的元素集合。如果 a 具有兩個以上的維度,則由 axis1 和 axis2 指定的軸用於確定要傳回其對角線的 2 維子陣列。結果陣列的形狀可以通過移除 axis1 和 axis2 並在右側附加一個索引(等於結果對角線的大小)來確定。在 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)。
- 傳回值:
- 引發:
- ValueError
如果 a 的維度小於 2。
範例
>>> 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.flipud
或numpy.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])
請注意,對角線的檢索順序會根據翻轉函數而變化。