一、torch.diag的基本用法
import torch x = torch.tensor([1, 2, 3]) diag_matrix = torch.diag(x) print(diag_matrix)
torch.diag用于创建对角矩阵。如果传入一个一维Tensor,则返回一个n × n的对角矩阵,其中n是x的长度。对角线上的元素由x的元素填充。
在上面的例子中,我们传入了一个长度为3的Tensor [1, 2, 3],所以得到了一个3 × 3的对角矩阵,对角线上的元素为[1, 2, 3]。
二、torch.diag的高级用法
除了基本用法之外,torch.diag还可以作用在二维Tensor上,实现提取对角线或者插入一个对角矩阵。以下是一些示例。
1. 提取对角线
x = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) diagonal = torch.diag(x) print(diagonal)
在这个例子中,我们传入了一个3 × 3的Tensor,得到了对角线上的元素[1, 5, 9]。
2. 插入一个对角矩阵
x = torch.tensor([[1, 2], [3, 4]]) y = torch.tensor([5, 6]) result = torch.diag_embed(y) + x print(result)
在这个例子中,我们首先定义了一个2 × 2的Tensor,然后定义了一个长度为2的Tensor [5, 6],最后使用torch.diag_embed插入一个2 × 2的对角矩阵生成一个新的Tensor,最终结果为:
tensor([[ 6, 2], [ 3, 10]])
三、使用torch.diag创建稀疏对角矩阵
我们可以使用torch.sparse.diag创建一个稀疏对角矩阵,即非对角线上的元素都是0。以下是一个例子。
import torch x = torch.tensor([1, 0, 2, 0, 3]) diag_matrix = torch.sparse.diag(x) print(diag_matrix)
在这个例子中,我们传入了一个长度为5的Tensor [1, 0, 2, 0, 3],得到了一个5 × 5的稀疏对角矩阵,对角线上的元素为[1, 0, 2, 0, 3]。