# diag¶

If `x` is a vector (1-D tensor), a 2-D square tensor with the elements of `x` as the diagonal is returned.

If `x` is a matrix (2-D tensor), a 1-D tensor with the diagonal elements of `x` is returned.

The argument `offset` controls the diagonal offset:

If `offset` = 0, it is the main diagonal.

If `offset` > 0, it is superdiagonal.

If `offset` < 0, it is subdiagonal.

Parameters
• x (Tensor) – The input tensor. Its shape is either 1-D or 2-D. Its data type should be float16, float32, float64, int32, int64.

• offset (int, optional) – The diagonal offset. A positive value represents superdiagonal, 0 represents the main diagonal, and a negative value represents subdiagonal.

• padding_value (int|float, optional) – Use this value to fill the area outside the specified diagonal band. Only takes effect when the input is a 1-D Tensor. The default value is 0.

• name (str, optional) – For details, please refer to Name. Generally, no setting is required. Default: None.

Returns

Tensor, a square matrix or a vector. The output data type is the same as input data type.

Examples

```import paddle

print(y)
# Tensor(shape=[3, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
#        [[1, 0, 0],
#         [0, 2, 0],
#         [0, 0, 3]])

print(y)
# Tensor(shape=[4, 4], dtype=int64, place=Place(cpu), stop_gradient=True,
#        [[0, 1, 0, 0],
#         [0, 0, 2, 0],
#         [0, 0, 0, 3],
#         [0, 0, 0, 0]])

print(y)
# Tensor(shape=[3, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
#        [[1, 6, 6],
#         [6, 2, 6],
#         [6, 6, 3]])
```
```import paddle

x = paddle.to_tensor([[1, 2, 3], [4, 5, 6]])
print(y)