mindspore.ops.gather

View Source On Gitee
mindspore.ops.gather(input_params, input_indices, axis, batch_dims=0)[source]

Returns the slice of the input tensor corresponding to the elements of input_indices on the specified axis.

The following figure shows the calculation process of Gather commonly:

../../_images/Gather.png

where params represents the input input_params, and indices represents the index to be sliced input_indices.

Note

  • The value of input_indices must be in the range of [0, input_param.shape[axis]). On CPU and GPU, an error is raised if an out of bound indice is found. On Ascend, the results may be undefined.

  • The data type of input_params cannot be mindspore.bool_ .

  • The shape of returned tensor is input_params.shape[:axis]+input_indices.shape[batch_dims:]+input_params.shape[axis+1:] .

Parameters
  • input_params (Tensor) – The input Tensor.

  • input_indices (Tensor) – The specified indices.

  • axis (Union(int, Tensor[int])) – The specified axis.

  • batch_dims (int) – The number of batch dimensions. Default 0 .

Returns

Tensor

Supported Platforms:

Ascend GPU CPU

Examples

>>> import mindspore
>>> # case1: input_indices is a Tensor with shape (5, ).
>>> input_params = mindspore.tensor([1, 2, 3, 4, 5, 6, 7], mindspore.float32)
>>> input_indices = mindspore.tensor([0, 2, 4, 2, 6], mindspore.int32)
>>> axis = 0
>>> output = mindspore.ops.gather(input_params, input_indices, axis)
>>> print(output)
[1. 3. 5. 3. 7.]
>>> # case2: input_indices is a Tensor with shape (2, 2). When the input_params has one dimension,
>>> # the output shape is equal to the input_indices shape.
>>> input_indices = mindspore.tensor([[0, 2], [2, 6]], mindspore.int32)
>>> axis = 0
>>> output = mindspore.ops.gather(input_params, input_indices, axis)
>>> print(output)
[[1. 3.]
 [3. 7.]]
>>> # case3: input_indices is a Tensor with shape (2, ) and
>>> # input_params is a Tensor with shape (3, 4) and axis is 0.
>>> input_params = mindspore.tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], mindspore.float32)
>>> input_indices = mindspore.tensor([0, 2], mindspore.int32)
>>> axis = 0
>>> output = mindspore.ops.gather(input_params, input_indices, axis)
>>> print(output)
[[ 1.  2.  3.  4.]
 [ 9. 10. 11. 12.]]
>>> # case4: input_indices is a Tensor with shape (2, ) and
>>> # input_params is a Tensor with shape (3, 4) and axis is 1, batch_dims is 1.
>>> input_params = mindspore.tensor([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], mindspore.float32)
>>> input_indices = mindspore.tensor([0, 2, 1], mindspore.int32)
>>> axis = 1
>>> batch_dims = 1
>>> output = mindspore.ops.gather(input_params, input_indices, axis, batch_dims)
>>> print(output)
[ 1.  7. 10.]