slice_scatter

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

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

参数

  • x (Tensor) - 输入的 Tensor 作为目标矩阵,数据类型为: boolfloat16float32float64uint8int8int16int32int64bfloat16complex64complex128

  • value (Tensor) - 需要插入的值,数据类型为: boolfloat16float32float64uint8int8int16int32int64bfloat16complex64complex128

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

  • starts (list|tuple) - 嵌入的起始索引。

  • ends (list|tuple) - 嵌入的截止索引。

  • strides (list|tuple) - 嵌入的步长。

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

返回

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的教程文档