slice_scatter¶
沿着 axes 将 value 矩阵的值嵌入到 x 矩阵。返回一个新的 Tensor 而不是视图。 axes 需要与 starts, ends 和 strides 尺寸一致。
参数¶
x (Tensor) - 输入的 Tensor 作为目标矩阵,数据类型为: bool、 float16、 float32、 float64、 uint8、 int8、 int16、 int32、 int64、 bfloat16、 complex64、 complex128。
value (Tensor) - 需要插入的值,数据类型为: bool、 float16、 float32、 float64、 uint8、 int8、 int16、 int32、 int64、 bfloat16、 complex64、 complex128。
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.]]])