diag_embed

paddle.nn.functional. diag_embed ( input, offset=0, dim1=- 2, dim2=- 1 ) [源代码]

创建一个 Tensor,其在指定的 2D 平面(由 dim1dim2 指定)上的对角线由输入 input 填充。默认的,指定的 2D 平面由返回 Tensor 的最后两维组成。

参数 offset 确定在指定的二维平面中填充对角线的位置:

  • 如果 offset = 0,则填充主对角线。

  • 如果 offset > 0,则填充主对角线右上的对角线。

  • 如果 offset < 0,则填充主对角线左下的对角线。

参数

  • input (Tensor|numpy.ndarray) - 输入变量,至少为 1D 数组,支持数据类型为 float32、float64、int32、int64。

  • offset (int,可选) - 从指定的二维平面中获取对角线的位置,默认值为 0,即主对角线。

  • dim1 (int,可选) - 填充对角线的二维平面的第一维,默认值为 -2。

  • dim2 (int,可选) - 填充对角线的二维平面的第二维,默认值为 -1。

返回

指定二维平面填充了对角线的 Tensor。数据类型和输入数据类型一致。

代码示例

import paddle
import paddle.nn.functional as F

diag_embed_input = paddle.arange(6)

diag_embed_output1 = F.diag_embed(diag_embed_input)
print(diag_embed_output1)
# Tensor(shape=[6, 6], dtype=int64, place=Place(cpu), stop_gradient=True,
#        [[0, 0, 0, 0, 0, 0],
#         [0, 1, 0, 0, 0, 0],
#         [0, 0, 2, 0, 0, 0],
#         [0, 0, 0, 3, 0, 0],
#         [0, 0, 0, 0, 4, 0],
#         [0, 0, 0, 0, 0, 5]])

diag_embed_output2 = F.diag_embed(diag_embed_input, offset=-1, dim1=0,dim2=1 )
print(diag_embed_output2)
# Tensor(shape=[7, 7], dtype=int64, place=Place(cpu), stop_gradient=True,
#        [[0, 0, 0, 0, 0, 0, 0],
#         [0, 0, 0, 0, 0, 0, 0],
#         [0, 1, 0, 0, 0, 0, 0],
#         [0, 0, 2, 0, 0, 0, 0],
#         [0, 0, 0, 3, 0, 0, 0],
#         [0, 0, 0, 0, 4, 0, 0],
#         [0, 0, 0, 0, 0, 5, 0]])

diag_embed_input_2dim = paddle.reshape(diag_embed_input,[2,3])
print(diag_embed_input_2dim)
# Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
#        [[0, 1, 2],
#         [3, 4, 5]])
diag_embed_output3 = F.diag_embed(diag_embed_input_2dim,offset= 0, dim1=0, dim2=2 )
print(diag_embed_output3)
# Tensor(shape=[3, 2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
#        [[[0, 0, 0],
#          [3, 0, 0]],

#         [[0, 1, 0],
#          [0, 4, 0]],

#         [[0, 0, 2],
#          [0, 0, 5]]])