上一主题

numpy.putmask

下一主题

numpy.nditer

numpy.fill_diagonal

numpy.fill_diagonal(a, val, wrap=False)[source]

填充给定数组的任何维数的主对角线。

对于具有a.ndim > 2的数组a具有索引a [i, i, ..., i] / t5>全部相同。此函数修改输入数组就地,不返回值。

参数:

a:数组,至少为2-D。

数组的对角线将被填充,它被就地修改。

val:标量

要写在对角线上的值,其类型必须与数组a的类型兼容。

wrap:bool

对于NumPy版本的高矩阵高达1.6.2,对角线“包裹”N列后。你可以有这个选项的行为。这只影响高矩阵。

也可以看看

diag_indicesdiag_indices_from

笔记

版本1.4.0中的新功能。

这个功能可以通过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 matrices no wrap
>>> a = np.zeros((5, 3),int)
>>> 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)
>>> 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)
>>> fill_diagonal(a, 4, wrap=True)
>>> a
array([[4, 0, 0, 0, 0],
       [0, 4, 0, 0, 0],
       [0, 0, 4, 0, 0]])