當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python numpy fill_diagonal用法及代碼示例


本文簡要介紹 python 語言中 numpy.fill_diagonal 的用法。

用法:

numpy.fill_diagonal(a, val, wrap=False)

填充任意維度的給定數組的主對角線。

對於數組aa.ndim >= 2,對角線是具有索引的位置列表a[i, ..., i]全部相同。該函數就地修改輸入數組,它不返回值。

參數

a 數組,至少是二維的。

要填充對角線的數組,它會被就地修改。

val 標量或類似數組

要寫在對角線上的值。如果 val 是標量,則該值沿對角線寫入。如果類似於數組,則沿對角線寫入展平的 val,並根據需要重複填充所有對角線條目。

wrap bool

對於 NumPy 版本至 1.6.2 的高矩陣,N 列之後的對角線 “wrapped”。您可以使用此選項實現此行為。這僅影響高矩陣。

注意

此函數可以通過 diag_indices 獲得,但在內部,此版本使用更快的實現,從不構造索引並使用簡單的切片。

例子

>>> a = np.zeros((3, 3), int)
>>> np.fill_diagonal(a, 5)
>>> a
array([[5, 0, 0],
       [0, 5, 0],
       [0, 0, 5]])

相同的函數可以對 4-D 數組進行操作:

>>> a = np.zeros((3, 3, 3, 3), int)
>>> np.fill_diagonal(a, 4)

為了清楚起見,我們隻顯示了幾個塊:

>>> a[0, 0]
array([[4, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])
>>> a[1, 1]
array([[0, 0, 0],
       [0, 4, 0],
       [0, 0, 0]])
>>> a[2, 2]
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 4]])

wrap 選項隻影響 tall 矩陣:

>>> # tall matrices no wrap
>>> a = np.zeros((5, 3), int)
>>> np.fill_diagonal(a, 4)
>>> a
array([[4, 0, 0],
       [0, 4, 0],
       [0, 0, 4],
       [0, 0, 0],
       [0, 0, 0]])
>>> # tall matrices wrap
>>> a = np.zeros((5, 3), int)
>>> np.fill_diagonal(a, 4, wrap=True)
>>> a
array([[4, 0, 0],
       [0, 4, 0],
       [0, 0, 4],
       [0, 0, 0],
       [4, 0, 0]])
>>> # wide matrices
>>> a = np.zeros((3, 5), int)
>>> np.fill_diagonal(a, 4, wrap=True)
>>> a
array([[4, 0, 0, 0, 0],
       [0, 4, 0, 0, 0],
       [0, 0, 4, 0, 0]])

可以通過使用 numpy.flipud numpy.fliplr 顛倒元素的順序來填充反對角線。

>>> a = np.zeros((3, 3), int);
>>> np.fill_diagonal(np.fliplr(a), [1,2,3])  # Horizontal flip
>>> a
array([[0, 0, 1],
       [0, 2, 0],
       [3, 0, 0]])
>>> np.fill_diagonal(np.flipud(a), [1,2,3])  # Vertical flip
>>> a
array([[0, 0, 3],
       [0, 2, 0],
       [1, 0, 0]])

請注意,填充對角線的順序因翻轉函數而異。

相關用法


注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.fill_diagonal。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。