scipy.sparse.

diags_array#

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

从对角线构造稀疏数组。

参数:
diagonalsarray_like 序列

包含数组对角线的数组序列,对应于 offsets

offsetsint 序列或 int,可选
要设置的对角线(不允许重复的偏移量)
  • k = 0 主对角线(默认)

  • k > 0 第 k 个上对角线

  • k < 0 第 k 个下对角线

shapeint 元组,可选

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

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

结果的矩阵格式。默认情况下 (format=None) 返回适当的稀疏数组格式。此选择可能会更改。

dtypedtype, 可选

数组的数据类型。

注释

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

diags_array 的结果是稀疏等效于

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

diags_arraydia_array 的不同之处在于它处理非对角线的方式。具体来说,dia_array 假设数据输入包括正/负偏移的行开始/结束处的填充(忽略的值),而 diags_array` 假设 输入 数据 没有 填充。 输入 ``diagonals 中的每个值都会被使用。

在 1.11 版本中添加。

示例

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

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

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

如果只需要一个对角线(如 numpy.diag),则以下方法也适用

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