scipy.sparse.

diags#

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

根据对角线构建一个稀疏矩阵。

警告

此函数返回一个稀疏矩阵,而不是一个稀疏数组。建议使用 diags_array 来利用稀疏数组功能。

参数:
diagonalsarray_like 序列

包含矩阵对角线(对应于 offsets)的数组序列。

offsetsint 或 int 序列,可选
要设置的对角线
  • k = 0 主对角线(默认值)

  • k > 0 第 k 个上对角线

  • k < 0 第 k 个下对角线

shapeint 元组,可选

结果的形状。如果省略,则返回一个足够大以包含对角线的正方形矩阵。

format{“dia”, “csr”, “csc”, “lil”, …},可选

结果的矩阵格式。默认(format=None),返回一个合适的稀疏矩阵格式。此选择可能会更改。

dtypedtype,可选

矩阵的数据类型。

另请参见

spdiags

从对角线构造矩阵

diags_array

构造稀疏数组而不是稀疏矩阵

注释

此函数与 spdiags 处理对角线外部分的方法不同。

diags 的结果相当于稀疏等效项

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

不允许重复的对角线偏移。

在版本 0.11 中添加。

示例

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

支持标量的广播(但需要指定形状)

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

如果只需要一个对角线(如 numpy.diag 中),以下内容同样适用

>>> diags([1, 2, 3], 1).toarray()
array([[ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  2.,  0.],
       [ 0.,  0.,  0.,  3.],
       [ 0.,  0.,  0.,  0.]])