您的位置:

用法及示例:torch.diag在PyTorch中如何实现对角矩阵的创建

一、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]。