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列后。你可以有这个选项的行为。这只影响高矩阵。
笔记
版本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]])