unsqueeze

paddle. unsqueeze ( x, axis, name=None ) [源代码]

向输入 Tensor 的 Shape 中一个或多个位置(axis)插入尺寸为 1 的维度。

请注意,在动态图模式下,输出 Tensor 将与输入 Tensor 共享数据,并且没有 Tensor 数据拷贝的过程。 如果不希望输入与输出共享数据,请使用 Tensor.clone,例如 unsqueeze_clone_x = x.unsqueeze(-1).clone()

参数

  • x (Tensor) - 输入的 Tensor,数据类型为:bfloat16、float32、float64、bool、int8、int32、int64。

  • axis (int|list|tuple|Tensor) - 表示要插入维度的位置。数据类型是 int32。如果 axis 的类型是 list 或 tuple,它的元素可以是整数或者形状为[]的 0-D Tensor。如果 axis 的类型是 Tensor,则是 1-D Tensor。如果 axis 是负数,则 axis=axis+ndim(x)+1 。

  • name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

Tensor,扩展维度后的多维 Tensor,数据类型与输入 Tensor 一致。

代码示例

>>> import paddle

>>> x = paddle.rand([5, 10])
>>> print(x.shape)
[5, 10]

>>> out1 = paddle.unsqueeze(x, axis=0)
>>> print(out1.shape)
[1, 5, 10]

>>> out2 = paddle.unsqueeze(x, axis=[0, 2])
>>> print(out2.shape)
[1, 5, 1, 10]

>>> axis = paddle.to_tensor([0, 1, 2])
>>> out3 = paddle.unsqueeze(x, axis=axis)
>>> print(out3.shape)
[1, 1, 1, 5, 10]

>>> # out1, out2, out3 share data with x in dygraph mode
>>> x[0, 0] = 10.
>>> print(out1[0, 0, 0])
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
10.)
>>> print(out2[0, 0, 0, 0])
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
10.)
>>> print(out3[0, 0, 0, 0, 0])
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
10.)