diagonal¶
根据参数 offset、axis1、axis2,返回输入 Tensor 的局部视图。
如果输入是 2D Tensor,则返回对角线元素。
如果输入的维度大于 2D,则返回由对角线元素组成的数组,其中对角线从由 axis1 和 axis2 指定的二维平面中获得。默认由输入的前两维组成获得对角线的 2D 平面。
参数 offset 确定从指定的二维平面中获取对角线的位置:
如果 offset = 0,则取主对角线。
如果 offset > 0,则取主对角线右上的对角线。
如果 offset < 0,则取主对角线左下的对角线。
参数¶
x (Tensor):输入变量,类型为 Tensor,支持 bool、int32、int64、float16、float32、float64 数据类型。
offset (int,可选)- 从指定的二维平面中获取对角线的位置,默认值为 0,既主对角线。
axis1 (int,可选)- 获取对角线的二维平面的第一维,默认值为 0。
axis2 (int,可选)- 获取对角线的二维平面的第二维,默认值为 1。
name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。
返回¶
Tensor (Tensor),输入 Tensor 在指定二维平面的局部视图,数据类型和输入数据类型一致。
代码示例¶
>>> import paddle
>>> paddle.seed(2023)
>>> x = paddle.rand([2, 2, 3],'float32')
>>> print(x)
Tensor(shape=[2, 2, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
[[[0.86583614, 0.52014720, 0.25960937],
[0.90525323, 0.42400089, 0.40641287]],
[[0.97020894, 0.74437362, 0.51785129],
[0.73292869, 0.97786582, 0.04315904]]])
>>> out1 = paddle.diagonal(x)
>>> print(out1)
Tensor(shape=[3, 2], dtype=float32, place=Place(cpu), stop_gradient=True,
[[0.86583614, 0.73292869],
[0.52014720, 0.97786582],
[0.25960937, 0.04315904]])
>>> out2 = paddle.diagonal(x, offset=0, axis1=2, axis2=1)
>>> print(out2)
Tensor(shape=[2, 2], dtype=float32, place=Place(cpu), stop_gradient=True,
[[0.86583614, 0.42400089],
[0.97020894, 0.97786582]])
>>> out3 = paddle.diagonal(x, offset=1, axis1=0, axis2=1)
>>> print(out3)
Tensor(shape=[3, 1], dtype=float32, place=Place(cpu), stop_gradient=True,
[[0.90525323],
[0.42400089],
[0.40641287]])
>>> out4 = paddle.diagonal(x, offset=0, axis1=1, axis2=2)
>>> print(out4)
Tensor(shape=[2, 2], dtype=float32, place=Place(cpu), stop_gradient=True,
[[0.86583614, 0.42400089],
[0.97020894, 0.97786582]])