mindspore.ops.IndexAdd
- class mindspore.ops.IndexAdd(axis, use_lock=True, check_index_bound=True)[source]
Adds tensor y to specified axis and indices of tensor x. The axis should be in the range from 0 to len(x.dim) - 1, and indices should be in the range from 0 to the size of x at the axis dimension.
- Parameters
axis (int) – The dimension along which to index.
- Inputs:
x (Parameter) - The input tensor to add to.
indices (Tensor) - The index of x on the axis th dimension to add to, with data type int32. The indices must be 1D with the same size as the size of the axis th dimension of y. The values of indices should be in the range of 0 to the size of the axis th dimension of x.
y (Tensor) - The input tensor with the value to add. Must have same data type as x. The shape must be the same as x except the axis th dimension.
- Outputs:
Tensor, has the same shape and dtype as x.
- Raises
TypeError – If x is not a Tensor.
TypeError – If neither indices nor y is a Tensor.
ValueError – If axis is out of x rank’s range.
ValueError – If x rank is not the same as y rank.
ValueError – If size of indices is not equal to dimension of y[axis].
ValueError – If y’s shape is not the same as x except the axis th dimension.
- Supported Platforms:
Ascend
GPU
Examples
>>> class Net(nn.Cell): ... def __init__(self): ... super(Net, self).__init__() ... self.index_add = ops.IndexAdd(axis=1) ... self.x = Parameter(Tensor(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), mindspore.float32)) ... self.indices = Tensor(np.array([0, 2]), mindspore.int32) ... ... def construct(self, y): ... return self.index_add(self.x, self.indices, y) ... >>> y = Tensor(np.array([[0.5, 1.0], [1.0, 1.5], [2.0, 2.5]]), mindspore.float32) >>> net = Net() >>> output = net(y) >>> print(output) [[ 1.5 2. 4. ] [ 5. 5. 7.5] [ 9. 8. 11.5]]