Spec-Zone.ru › PyTorch 2

torch.sparse.spdiags

torch.sparse.spdiags(diagonals, offsets, shape, layout=None) → Tensor

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

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

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

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

Параметры
  • diagonals (Tensor) – Матрица, хранящая диагонали построчно
  • offsets (Tensor) – Диагонали, которые нужно установить, хранятся как вектор
  • shape (2-кортеж из целых чисел) – Желаемая форма результата
Ключевые аргументы

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

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

Spec-Zone.ru

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