# GatherElements¶

Versioned name : GatherElements-6

Category : Data movement

Short description : GatherElements takes elements from the input `data` tensor at positions specified in the `indices` tensor.

Detailed description GatherElements takes elements from the `data` tensor at positions specified in the `indices` tensor. The `data` and `indices` tensors have the same rank `r >= 1`. Optional attribute `axis` determines along which axis elements with indices specified in `indices` are taken. The `indices` tensor has the same shape as the `data` tensor except for the `axis` dimension. Output consists of values (gathered from the `data` tensor) for each element in the `indices` tensor and has the same shape as `indices`.

For instance, in the 3D case (`r = 3`), the output is determined by the following equations:

```out[i][j][k] = data[indices[i][j][k]][j][k] if axis = 0
out[i][j][k] = data[i][indices[i][j][k]][k] if axis = 1
out[i][j][k] = data[i][j][indices[i][j][k]] if axis = 2```

Example 1 with concrete values:

```data = [
[1, 2],
[3, 4],
]
indices = [
[0, 1],
[0, 0],
]
axis = 0
output = [
[1, 4],
[1, 2],
]```

Example 2 with `axis` = 1 and `indices` having greater (than `data`) shape:

```data = [
[1, 7],
[4, 3],
]
indices = [
[1, 1, 0],
[1, 0, 1],
]
axis = 1
output = [
[7, 7, 1],
[3, 4, 3],
]```

Example 3 `indices` has lesser (than `data`) shape:

```data = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
indices = [
[1, 0, 1],
[1, 2, 0],
]
axis = 0
output = [
[4, 2, 6],
[4, 8, 3],
]```

Attributes :

• axis

• Description : Which axis to gather on. Negative value means counting dimensions from the back.

• Range of values : `[-r, r-1]` where `r = rank(data)`.

• Type : int

• Required : yes

Inputs :

• 1 : Tensor of type T. This is a tensor of a `rank >= 1`. Required.

• 2 : Tensor of type T_IND with the same rank as the input. All index values are expected to be within bounds `[0, s-1]`, where `s` is size along `axis` dimension of the `data` tensor. Required.

Outputs :

• 1 : Tensor with gathered values of type T. Tensor has the same shape as `indices`.

Types

• T : any supported type.

• T_IND : `int32` or `int64`.

Example

```<... type="GatherElements" ...>
<data axis="1" />
<input>
<port id="0">
<dim>3</dim>
<dim>7</dim>
<dim>5</dim>
</port>
<port id="1">
<dim>3</dim>
<dim>10</dim>
<dim>5</dim>
</port>
</input>
<output>
<port id="2">
<dim>3</dim>
<dim>10</dim>
<dim>5</dim>
</port>
</output>
</layer>```