slice_scatter

paddle. slice_scatter ( x, value, axes=None, starts=None, ends=None, strides=None ) [源代码]

沿着 axes 将 value 矩阵的值嵌入到 x 矩阵。返回一个新的 Tensor 而不是视图。 axes 需要与 starts, ends 和 strides 尺寸一致。

备注

此 API 有两种调用方式: 1. paddle.slice_scatter(x, value, axes=None, starts=None, ends=None, strides=None) (Paddle 风格):沿多个维度嵌入 value 张量 2. paddle.slice_scatter(input, src, dim=0, start=None, end=None, step=1) (PyTorch 风格):沿单个维度嵌入 src 张量

图示展示了示例二 ——一个形状为 [3, 9] 的张量 x,在 axis 1 上使用 slice scatter 操作,将 [3, 1] 的 value 张量嵌入到指定的范围内。图中显示了原始张量、value 张量以及操作后的结果。

图例

参数

  • x (Tensor) - 输入的 Tensor 作为目标矩阵,数据类型为: bool、 float16、 float32、 float64、 uint8、 int8、 int16、 int32、 int64、 bfloat16、 complex64、 complex128。别名 input。

  • value (Tensor) - 需要插入的值,数据类型为: bool、 float16、 float32、 float64、 uint8、 int8、 int16、 int32、 int64、 bfloat16、 complex64、 complex128。别名 src。

  • axes (list|tuple,可选) - 指定沿着哪几个维度嵌入对应的值。别名 dim。

  • starts (list|tuple,可选) - 嵌入的起始索引。别名 start。

  • ends (list|tuple,可选) - 嵌入的截止索引。别名 end。

  • strides (list|tuple,可选) - 嵌入的步长。别名 step。

返回

Tensor, 与 x 数据类型与形状相同。

代码示例

>>> import paddle

>>> x = paddle.zeros((3, 9))
>>> value = paddle.ones((3, 2))
>>> res = paddle.slice_scatter(x, value, axes=[1], starts=[2], ends=[6], strides=[2])
>>> print(res)
Tensor(shape=[3, 9], dtype=float32, place=Place(cpu), stop_gradient=True,
[[0., 0., 1., 0., 1., 0., 0., 0., 0.],
 [0., 0., 1., 0., 1., 0., 0., 0., 0.],
 [0., 0., 1., 0., 1., 0., 0., 0., 0.]])

>>> # broadcast `value` got the same result
>>> x = paddle.zeros((3, 9))
>>> value = paddle.ones((3, 1))
>>> res = paddle.slice_scatter(x, value, axes=[1], starts=[2], ends=[6], strides=[2])
>>> print(res)
Tensor(shape=[3, 9], dtype=float32, place=Place(cpu), stop_gradient=True,
[[0., 0., 1., 0., 1., 0., 0., 0., 0.],
 [0., 0., 1., 0., 1., 0., 0., 0., 0.],
 [0., 0., 1., 0., 1., 0., 0., 0., 0.]])

>>> # broadcast `value` along multiple axes
>>> x = paddle.zeros((3, 3, 5))
>>> value = paddle.ones((1, 3, 1))
>>> res = paddle.slice_scatter(x, value, axes=[0, 2], starts=[1, 0], ends=[3, 4], strides=[1, 2])
>>> print(res)
Tensor(shape=[3, 3, 5], dtype=float32, place=Place(cpu), stop_gradient=True,
[[[0., 0., 0., 0., 0.],
  [0., 0., 0., 0., 0.],
  [0., 0., 0., 0., 0.]],
 [[1., 0., 1., 0., 0.],
  [1., 0., 1., 0., 0.],
  [1., 0., 1., 0., 0.]],
 [[1., 0., 1., 0., 0.],
  [1., 0., 1., 0., 0.],
  [1., 0., 1., 0., 0.]]])

使用本API的教程文档