torch.diag_embed — PyTorch 2.7 documentation (original) (raw)

torch.diag_embed(input, offset=0, dim1=-2, dim2=-1) → Tensor

Creates a tensor whose diagonals of certain 2D planes (specified bydim1 and dim2) are filled by input. To facilitate creating batched diagonal matrices, the 2D planes formed by the last two dimensions of the returned tensor are chosen by default.

The argument offset controls which diagonal to consider:

The size of the new matrix will be calculated to make the specified diagonal of the size of the last input dimension. Note that for offset other than 00, the order of dim1and dim2 matters. Exchanging them is equivalent to changing the sign of offset.

Applying torch.diagonal() to the output of this function with the same arguments yields a matrix identical to input. However,torch.diagonal() has different default dimensions, so those need to be explicitly specified.

Parameters

Example:

a = torch.randn(2, 3) torch.diag_embed(a) tensor([[[ 1.5410, 0.0000, 0.0000], [ 0.0000, -0.2934, 0.0000], [ 0.0000, 0.0000, -2.1788]],

    [[ 0.5684,  0.0000,  0.0000],
     [ 0.0000, -1.0845,  0.0000],
     [ 0.0000,  0.0000, -1.3986]]])

torch.diag_embed(a, offset=1, dim1=0, dim2=2) tensor([[[ 0.0000, 1.5410, 0.0000, 0.0000], [ 0.0000, 0.5684, 0.0000, 0.0000]],

    [[ 0.0000,  0.0000, -0.2934,  0.0000],
     [ 0.0000,  0.0000, -1.0845,  0.0000]],

    [[ 0.0000,  0.0000,  0.0000, -2.1788],
     [ 0.0000,  0.0000,  0.0000, -1.3986]],

    [[ 0.0000,  0.0000,  0.0000,  0.0000],
     [ 0.0000,  0.0000,  0.0000,  0.0000]]])