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, и смещение не может повторяться.- Параметры
- Ключевые аргументы
-
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