scipy.sparse.

# diags_array#

scipy.sparse.diags_array(diagonals, /, *, offsets=0, shape=None, format=None, dtype=None)[source]#

Construct a sparse array from diagonals.

Parameters:
diagonalssequence of array_like

Sequence of arrays containing the array diagonals, corresponding to offsets.

offsetssequence of int or an int, optional
Diagonals to set:
• k = 0 the main diagonal (default)

• k > 0 the kth upper diagonal

• k < 0 the kth lower diagonal

shapetuple of int, optional

Shape of the result. If omitted, a square array large enough to contain the diagonals is returned.

format{“dia”, “csr”, “csc”, “lil”, …}, optional

Matrix format of the result. By default (format=None) an appropriate sparse array format is returned. This choice is subject to change.

dtypedtype, optional

Data type of the array.

Notes

The result from `diags_array` is the sparse equivalent of:

```np.diag(diagonals[0], offsets[0])
+ ...
+ np.diag(diagonals[k], offsets[k])
```

Repeated diagonal offsets are disallowed.

Examples

```>>> from scipy.sparse import diags_array
>>> diagonals = [[1, 2, 3, 4], [1, 2, 3], [1, 2]]
>>> diags_array(diagonals, offsets=[0, -1, 2]).toarray()
array([[1, 0, 1, 0],
[1, 2, 0, 2],
[0, 2, 3, 0],
[0, 0, 3, 4]])
```

Broadcasting of scalars is supported (but shape needs to be specified):

```>>> diags_array([1, -2, 1], offsets=[-1, 0, 1], shape=(4, 4)).toarray()
array([[-2.,  1.,  0.,  0.],
[ 1., -2.,  1.,  0.],
[ 0.,  1., -2.,  1.],
[ 0.,  0.,  1., -2.]])
```

If only one diagonal is wanted (as in `numpy.diag`), the following works as well:

```>>> diags_array([1, 2, 3], offsets=1).toarray()
array([[ 0.,  1.,  0.,  0.],
[ 0.,  0.,  2.,  0.],
[ 0.,  0.,  0.,  3.],
[ 0.,  0.,  0.,  0.]])
```