# nlcpy.fill_diagonal

nlcpy.fill_diagonal(a, val, wrap=False)[ソース]

Fills the main diagonal of the given array of any dimensionality.

For an array a with `a.ndim >= 2`, the diagonal is the list of locations with indices `a[i, ..., i]` all identical. This function modifies the input array in-place, it does not return a value.

Parameters
aarray_like

Array whose diagonal is to be filled, it gets modified in-place.

valscalar

Value to be written on the diagonal, its type must be compatible with that of the array a.

wrapbool

For tall matrices, the diagonal "wrapped" after N columns. You can have this behavior with this option. This affects only tall matrices.

`diag_indices`

Returns the indices to access the main diagonal of an array.

This functionality can be obtained via diag_indices, but internally this version uses a much faster implementation that never constructs the indices and uses simple slicing.

Examples

```>>> import nlcpy as vp
>>> a = vp.zeros((3, 3), int)
>>> vp.fill_diagonal(a, 5)
>>> a
array([[5, 0, 0],
[0, 5, 0],
[0, 0, 5]])
```

The same function can operate on a 4-D array:

```>>> a = vp.zeros((3, 3, 3, 3), int)
>>> vp.fill_diagonal(a, 4)
```

We only show a few blocks for clarity:

```>>> 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]])
```

The wrap option affects only tall matrices:

```>>> # tall matrices no wrap
>>> a = vp.zeros((5, 3), int)
>>> vp.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 = vp.zeros((5, 3), int)
>>> vp.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 = vp.zeros((3, 5), int)
>>> vp.fill_diagonal(a, 4, wrap=True)
>>> a
array([[4, 0, 0, 0, 0],
[0, 4, 0, 0, 0],
[0, 0, 4, 0, 0]])
```

The anti-diagonal can be filled by reversing the order of elements using either nlcpy.flipud or nlcpy.fliplr.

```>>> a = vp.zeros((3, 3), int);
>>> vp.fill_diagonal(vp.fliplr(a), [1,2,3])  # Horizontal flip
>>> a
array([[0, 0, 1],
[0, 2, 0],
[3, 0, 0]])
>>> vp.fill_diagonal(vp.flipud(a), [1,2,3])  # Vertical flip
>>> a
array([[0, 0, 3],
[0, 2, 0],
[1, 0, 0]])
```

Note that the order in which the diagonal is filled varies depending on the flip function.