diags — SciPy v1.15.2 Manual (original) (raw)

scipy.sparse.

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

Construct a sparse matrix from diagonals.

Warning

This function returns a sparse matrix – not a sparse array. You are encouraged to use diags_array to take advantage of the sparse array functionality.

Parameters:

diagonalssequence of array_like

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

offsetssequence of int or an int, optional

Diagonals to set (repeated offsets are not allowed):

shapetuple of int, optional

Shape of the result. If omitted, a square matrix 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 matrix format is returned. This choice is subject to change.

dtypedtype, optional

Data type of the matrix.

See also

spdiags

construct matrix from diagonals

diags_array

construct sparse array instead of sparse matrix

Notes

Repeated diagonal offsets are disallowed.

The result from diags is the sparse equivalent of:

np.diag(diagonals[0], offsets[0])

diags differs from dia_matrix in the way it handles off-diagonals. Specifically, dia_matrix assumes the data input includes padding (ignored values) at the start/end of the rows for positive/negative offset, while diags` assumes the input data has no padding. Each value in the input ``diagonals is used.

Added in version 0.11.

Examples

from scipy.sparse import diags diagonals = [[1, 2, 3, 4], [1, 2, 3], [1, 2]] diags(diagonals, [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([1, -2, 1], [-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([1, 2, 3], 1).toarray() array([[ 0., 1., 0., 0.], [ 0., 0., 2., 0.], [ 0., 0., 0., 3.], [ 0., 0., 0., 0.]])