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 不得重複。- 參數
- 關鍵字參數
layout (
torch.layout
, optional) – 返回張量所需的 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]])
變更輸出 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]])