当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。