diag_embed

fluid.layers.diag_embed(input, offset=0, dim1=-2, dim2=-1):

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

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

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

参数

  • input (Variable|numpy.ndarray)- 输入变量,至少为 1D 数组,支持数据类型为 float32,float64,int32,int64。
  • offset (int ,可选)- 从指定的二维平面中获取对角线的位置,默认值为 0,既主对角线。
  • dim1 (int , 可选)- 填充对角线的二维平面的第一维,默认值为 -2。
  • dim2 (int , 可选)- 填充对角线的二维平面的第二维,默认值为 -1。

返回

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

返回类型

变量(Variable)

代码示例

  1. import paddle.fluid as fluid
  2. import paddle.fluid.dygraph as dg
  3. import numpy as np
  4. diag_embed = np.random.randn(2, 3).astype('float32')
  5. # [[ 0.7545889 , -0.25074545, 0.5929117 ],
  6. # [-0.6097662 , -0.01753256, 0.619769 ]]
  7. with dg.guard():
  8. data1 = fluid.layers.diag_embed(diag_embed)
  9. data1.numpy()
  10. # [[[ 0.7545889 , 0. , 0. ],
  11. # [ 0. , -0.25074545, 0. ],
  12. # [ 0. , 0. , 0.5929117 ]],
  13. # [[-0.6097662 , 0. , 0. ],
  14. # [ 0. , -0.01753256, 0. ],
  15. # [ 0. , 0. , 0.619769 ]]]
  16. data2 = fluid.layers.diag_embed(diag_embed, offset=-1, dim1=0, dim2=2)
  17. data2.numpy()
  18. # [[[ 0. , 0. , 0. , 0. ],
  19. # [ 0.7545889 , 0. , 0. , 0. ],
  20. # [ 0. , -0.25074545, 0. , 0. ],
  21. # [ 0. , 0. , 0.5929117 , 0. ]],
  22. #
  23. # [[ 0. , 0. , 0. , 0. ],
  24. # [-0.6097662 , 0. , 0. , 0. ],
  25. # [ 0. , -0.01753256, 0. , 0. ],
  26. # [ 0. , 0. , 0.619769 , 0. ]]]
  27. data3 = fluid.layers.diag_embed(diag_embed, offset=1, dim1=0, dim2=2)
  28. data3.numpy()
  29. # [[[ 0. , 0.7545889 , 0. , 0. ],
  30. # [ 0. , -0.6097662 , 0. , 0. ]],
  31. #
  32. # [[ 0. , 0. , -0.25074545, 0. ],
  33. # [ 0. , 0. , -0.01753256, 0. ]],
  34. #
  35. # [[ 0. , 0. , 0. , 0.5929117 ],
  36. # [ 0. , 0. , 0. , 0.619769 ]],
  37. #
  38. # [[ 0. , 0. , 0. , 0. ],
  39. # [ 0. , 0. , 0. , 0. ]]]