put_along_axis¶
- paddle. put_along_axis ( arr, indices, values, axis, reduce='assign', include_self=True, broadcast=True ) [源代码] ¶
基于输入 index 矩阵,将输入 value 沿着指定 axis 放置入 arr 矩阵。索引矩阵和 value 必须和 arr 矩阵有相同的维度,需要能够 broadcast 与 arr 矩阵对齐。
参数¶
arr (Tensor) - 输入的 Tensor 作为目标矩阵,数据类型为:float32、float64。
indices (Tensor) - 索引矩阵,包含沿轴提取 1d 切片的下标,必须和 arr 矩阵有相同的维度,需要能够 broadcast 与 arr 矩阵对齐,数据类型为:int、int64。
value (float)- 需要插入的值,形状和维度需要能够被 broadcast 与 indices 矩阵匹配,数据类型为:float32、float64。
axis (int) - 指定沿着哪个维度获取对应的值,数据类型为:int。
reduce (str,可选) - 归约操作类型,默认为
assign
,可选为add
、multiple
、mean
、amin
、amax
。不同的规约操作插入值 value 对于输入矩阵 arr 会有不同的行为,如为assgin
则覆盖输入矩阵,add
则累加至输入矩阵,mean
则计算累计平均值至输入矩阵,multiple
则累乘至输入矩阵,amin
则计算累计最小值至输入矩阵,amax
则计算累计最大值至输入矩阵。include_self (bool,可选) - 规约时是否包含 arr 的元素,默认为
True
。broadcast (bool,可选) - 是否广播
index
矩阵,默认为True
。
返回¶
输出 Tensor,indeces 矩阵选定的下标会被插入 value,与 arr
数据类型相同。
代码示例¶
>>> import paddle
>>> x = paddle.to_tensor([[10, 30, 20], [60, 40, 50]])
>>> index = paddle.to_tensor([[0]])
>>> value = 99
>>> axis = 0
>>> result = paddle.put_along_axis(x, index, value, axis)
>>> print(result)
Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[99, 99, 99],
[60, 40, 50]])
>>> index = paddle.zeros((2,2)).astype("int32")
>>> value=paddle.to_tensor([[1,2],[3,4]]).astype(x.dtype)
>>> result = paddle.put_along_axis(x, index, value, 0, "add", True, False)
>>> print(result)
Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[14, 36, 20],
[60, 40, 50]])
>>> result = paddle.put_along_axis(x, index, value, 0, "mul", True, False)
>>> print(result)
Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[30 , 240, 20 ],
[60 , 40 , 50 ]])
>>> result = paddle.put_along_axis(x, index, value, 0, "mean", True, False)
>>> print(result)
Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[4 , 12, 20],
[60, 40, 50]])
>>> result = paddle.put_along_axis(x, index, value, 0, "amin", True, False)
>>> print(result)
Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[1 , 2 , 20],
[60, 40, 50]])
>>> result = paddle.put_along_axis(x, index, value, 0, "amax", True, False)
>>> print(result)
Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[10, 30, 20],
[60, 40, 50]])
>>> result = paddle.put_along_axis(x, index, value, 0, "add", False, False)
>>> print(result)
Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[4 , 6 , 20],
[60, 40, 50]])