numpy.fill_diagonal #
- 麻木的。fill_diagonal ( a , val , wrap = False ) [来源] #
填充任意维度的给定数组的主对角线。
对于带有 的数组a,对角线是索引全部相同的位置列表。该函数就地修改输入数组,它不返回值。
a.ndim >= 2
a[i, ..., i]
- 参数:
- 一个数组,至少是二维的。
要填充对角线的数组,它会就地修改。
- val标量或 array_like
要写在对角线上的值。如果val是标量,则该值沿对角线写入。如果类似于数组,则沿对角线写入展平的val ,并根据需要重复填充所有对角线条目。
- 包裹布尔值
对于 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 维数组进行操作:
>>> 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]])
环绕选项仅影响高矩阵:
>>> # 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]])
请注意,填充对角线的顺序根据翻转函数的不同而变化。