快捷方式

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 的長度相符,並且一個 offset 不得重複。

參數
  • diagonals (Tensor) – 儲存各對角線的矩陣,以列為單位

  • offsets (Tensor) – 要設定的對角線,儲存為向量

  • shape (整數的 2-tuple) – 結果所需的形狀

關鍵字參數

layout (torch.layout, optional) – 返回張量所需的 layout。支援 torch.sparse_cootorch.sparse_csctorch.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]])

變更輸出 layout

>>> 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 的列的索引會被視為輸出中的列索引。 這樣做的效果是,當設定具有正 offset k 的對角線時,沿著該對角線的第一個數值將會是 diagonals 的列中位置 k 的數值。

指定正 offset

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

文件

Access comprehensive developer documentation for PyTorch

View Docs

Tutorials

Get in-depth tutorials for beginners and advanced developers

View Tutorials

Resources

Find development resources and get your questions answered

View Resources