Spec-Zone.ru › PyTorch 2.14

torch.sparse.spdiags

torch.sparse.spdiags(diagonals, offsets, shape, layout=None) → Tensor [исходный код]

Создаёт разреженный двумерный тензор, размещая значения из строк diagonals на указанных диагоналях результата

Тензор offsets определяет, какие диагонали задаются.

  • Если offsets[i] = 0, это главная диагональ
  • Если offsets[i] < 0, это диагональ ниже главной
  • Если offsets[i] > 0, это диагональ выше главной

Число строк в diagonals должно совпадать с длиной offsets, а смещения не должны повторяться.

Параметры:
  • diagonals (Tensor) – Матрица, в строках которой хранятся диагонали
  • offsets (Tensor) – Диагонали, которые нужно задать; хранятся в виде вектора
  • shape (2-tuple of ints) – Требуемая форма результата
Именованные аргументы:

layout (torch.layout, необязательный) – Требуемый формат возвращаемого тензора. Поддерживаются torch.sparse_coo, torch.sparse_csc и torch.sparse_csr. По умолчанию: torch.sparse_coo

Примеры:

Задать главную и две ближайшие нижние диагонали матрицы:

>>> diags = torch.arange(9).reshape(3, 3)
>>> diags
tensor([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])
>>> s = torch.sparse.spdiags(diags, torch.tensor([0, -1, -2]), (3, 3))
>>> s
tensor(indices=tensor([[0, 1, 2, 1, 2, 2],
                       [0, 1, 2, 0, 1, 0]]),
       values=tensor([0, 1, 2, 3, 4, 6]),
       size=(3, 3), nnz=6, layout=torch.sparse_coo)
>>> s.to_dense()
tensor([[0, 0, 0],
        [3, 1, 0],
        [6, 4, 2]])

Изменить формат результата:

>>> diags = torch.arange(9).reshape(3, 3)
>>> diags
tensor([[0, 1, 2],[3, 4, 5], [6, 7, 8])
>>> s = torch.sparse.spdiags(diags, torch.tensor([0, -1, -2]), (3, 3), layout=torch.sparse_csr)
>>> s
tensor(crow_indices=tensor([0, 1, 3, 6]),
       col_indices=tensor([0, 0, 1, 0, 1, 2]),
       values=tensor([0, 3, 1, 6, 4, 2]), size=(3, 3), nnz=6,
       layout=torch.sparse_csr)
>>> s.to_dense()
tensor([[0, 0, 0],
        [3, 1, 0],
        [6, 4, 2]])

Задать части диагоналей большого результата:

>>> diags = torch.tensor([[1, 2], [3, 4]])
>>> offsets = torch.tensor([0, -1])
>>> torch.sparse.spdiags(diags, offsets, (5, 5)).to_dense()
tensor([[1, 0, 0, 0, 0],
        [3, 2, 0, 0, 0],
        [0, 4, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]])

Примечание

При задании значений на определённой диагонали индекс элемента на диагонали и индекс в строке diagonals принимаются за индекс столбца в результате. В результате, если задаётся диагональ с положительным смещением k, первым значением этой диагонали будет значение в позиции k строки diagonals

Указание положительного смещения:

>>> diags = torch.tensor([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
>>> torch.sparse.spdiags(diags, torch.tensor([0, 1, 2]), (5, 5)).to_dense()
tensor([[1, 2, 3, 0, 0],
        [0, 2, 3, 0, 0],
        [0, 0, 3, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0]])

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.sparse.spdiags.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API