mindspore.ops.GatherD

class mindspore.ops.GatherD[源代码]

获取指定轴的元素。

对于三维Tensor,输出为:

output[i][j][k] = x[index[i][j][k]][j][k]  # if dim == 0

output[i][j][k] = x[i][index[i][j][k]][k]  # if dim == 1

output[i][j][k] = x[i][j][index[i][j][k]]  # if dim == 2

如果 x 是shape为 \((z_0, z_1, ..., z_i, ..., z_{n-1})\) ,维度 dim 为i的n维Tensor,则 index 必须是shape为 \((z_0, z_1, ..., y, ..., z_{n-1})\) 的n维Tensor,其中 y 大于等于1,输出的shape与 index 相同。

输入:

  • x (Tensor) - GatherD的输入,任意维度的Tensor。

  • dim (int) - 获取元素的轴。数据类型为int32或int64。只能是常量值。

  • index (Tensor) - 获取收集元素的索引。支持的数据类型包括:int32,int64。每个索引元素的取值范围为[-x_rank[dim], x_rank[dim])。

输出:

Tensor,shape为 \((z_1, z_2, ..., z_N)\) 的Tensor,数据类型与 x 相同。

异常:

  • TypeError - dimindex 的数据类型既不是int32,也不是int64。

  • ValueError - x 的shape长度不等于 index 的shape长度。

支持平台:

Ascend GPU CPU

样例:

>>> x = Tensor(np.array([[1, 2], [3, 4]]), mindspore.int32)
>>> index = Tensor(np.array([[0, 0], [1, 0]]), mindspore.int32)
>>> dim = 1
>>> output = ops.GatherD()(x, dim, index)
>>> print(output)
[[1 1]
 [4 3]]