Spec-Zone.ru › PyTorch 1

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 (Тензор) – Матрица, хранящая диагонали построчно
  • offsets (Тензор) – Диагонали, которые будут установлены, хранятся как вектор
  • 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/1.13/generated/torch.sparse.spdiags.html

Spec-Zone.ru

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