numpy.
fill_diagonal
填充任意维数的给定数组的主对角线。
对于数组 a 具有 a.ndim >= 2 ,对角线是带有索引的位置列表 a[i, ..., i] 完全相同。此函数在适当位置修改输入数组,但不返回值。
a.ndim >= 2
a[i, ..., i]
要填充其对角线的数组,它将在适当的位置进行修改。
写在对角线上的值。如果 val 是标量,值沿对角线写入。如果像数组,则 val 是沿着对角线写的,如果需要的话,重复填写所有对角线条目。
对于numpy版本1.6.2之前的高矩阵,对角线“包裹”在n列之后。您可以使用此选项进行此行为。这只影响高矩阵。
参见
diag_indices
diag_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) >>> 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 .
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]])
请注意,对角线的填充顺序因翻转函数而异。