diag_embed_cn.rst 3.2 KB
Newer Older
1 2 3
.. _cn_api_functional_diag_embed:

diag_embed
T
tianshuo78520a 已提交
4
-------------------------------
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

.. py:function:: paddle.functional.diag_embed(input, offset=0, dim1=-2, dim2=-1):

    该 OP 创建一个 Tensor,其在指定的 2D 平面(由 ``dim1`` 和 ``dim2`` 指定)上的对角线由输入 ``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)

**代码示例** 

..  code-block:: python

    import paddle.nn.functional as F
    import paddle.fluid.dygraph as dg
    import numpy as np
    
    diag_embed = np.random.randn(2, 3).astype('float32')
    # [[ 0.7545889 , -0.25074545,  0.5929117 ],
    #  [-0.6097662 , -0.01753256,  0.619769  ]]
    with dg.guard():
        data1 = F.diag_embed(diag_embed)
        data1.numpy()
        # [[[ 0.7545889 ,  0.        ,  0.        ],
        #  [ 0.        , -0.25074545,  0.        ],
        #   [ 0.        ,  0.        ,  0.5929117 ]],

        # [[-0.6097662 ,  0.        ,  0.        ],
        #  [ 0.        , -0.01753256,  0.        ],
        #  [ 0.        ,  0.        ,  0.619769  ]]]

        data2 = F.diag_embed(diag_embed, offset=-1, dim1=0, dim2=2)
        data2.numpy()
        # [[[ 0.        ,  0.        ,  0.        ,  0.        ],
        #   [ 0.7545889 ,  0.        ,  0.        ,  0.        ],
        #   [ 0.        , -0.25074545,  0.        ,  0.        ],
        #   [ 0.        ,  0.        ,  0.5929117 ,  0.        ]],
        #
        #  [[ 0.        ,  0.        ,  0.        ,  0.        ],
        #   [-0.6097662 ,  0.        ,  0.        ,  0.        ],
        #   [ 0.        , -0.01753256,  0.        ,  0.        ],
        #   [ 0.        ,  0.        ,  0.619769  ,  0.        ]]]

        data3 = F.diag_embed(diag_embed, offset=1, dim1=0, dim2=2)
        data3.numpy()
        # [[[ 0.        ,  0.7545889 ,  0.        ,  0.        ],
        #   [ 0.        , -0.6097662 ,  0.        ,  0.        ]],
        #
        #  [[ 0.        ,  0.        , -0.25074545,  0.        ],
        #   [ 0.        ,  0.        , -0.01753256,  0.        ]],
        #
        #  [[ 0.        ,  0.        ,  0.        ,  0.5929117 ],
        #   [ 0.        ,  0.        ,  0.        ,  0.619769  ]],
        #
        #  [[ 0.        ,  0.        ,  0.        ,  0.        ],
        #   [ 0.        ,  0.        ,  0.        ,  0.        ]]]