GatherND¶
GatherND - 13¶
Version¶
name: GatherND (GitHub)
domain:
mainsince_version:
13function:
Falsesupport_level:
SupportType.COMMONshape inference:
True
This version of the operator has been available since version 13.
Summary¶
Given data tensor of rank r >= 1, indices tensor of rank q >= 1, and batch_dims integer b, this operator gathers
slices of data into an output tensor of rank q + r - indices_shape[-1] - 1 - b.
indices is an q-dimensional integer tensor, best thought of as a (q-1)-dimensional tensor of index-tuples into data,
where each element defines a slice of data
batch_dims (denoted as b) is an integer indicating the number of batch dimensions, i.e the leading b number of dimensions of
data tensor and indices are representing the batches, and the gather starts from the b+1 dimension.
Some salient points about the inputs’ rank and shape:
r >= 1 and q >= 1 are to be honored. There is no dependency condition to be met between ranks
randqThe first
bdimensions of the shape ofindicestensor anddatatensor must be equal.b < min(q, r) is to be honored.
The
indices_shape[-1]should have a value between 1 (inclusive) and rankr-b(inclusive)All values in
indicesare expected to be within bounds [-s, s-1] along axis of sizes(i.e.)-data_shape[i] <= indices[...,i] <= data_shape[i] - 1. It is an error if any of the index values are out of bounds.
The output is computed as follows:
The output tensor is obtained by mapping each index-tuple in the indices tensor to the corresponding slice of the input data.
If
indices_shape[-1] > r-b=> error conditionIf
indices_shape[-1] == r-b, since the rank ofindicesisq,indicescan be thought of asN(q-b-1)-dimensional tensors containing 1-D tensors of dimensionr-b, whereNis an integer equals to the product of 1 and all the elements in the batch dimensions of the indices_shape. Let us think of each suchr-branked tensor asindices_slice. Each scalar value corresponding todata[0:b-1,indices_slice]is filled into the corresponding location of the(q-b-1)-dimensional tensor to form theoutputtensor (Example 1 below)If
indices_shape[-1] < r-b, since the rank ofindicesisq,indicescan be thought of asN(q-b-1)-dimensional tensor containing 1-D tensors of dimension< r-b. Let us think of each such tensors asindices_slice. Each tensor slice corresponding todata[0:b-1, indices_slice , :]is filled into the corresponding location of the(q-b-1)-dimensional tensor to form theoutputtensor (Examples 2, 3, 4 and 5 below)
This operator is the inverse of ScatterND.
Example 1
batch_dims = 0
data = [[0,1],[2,3]] # data_shape = [2, 2]
indices = [[0,0],[1,1]] # indices_shape = [2, 2]
output = [0,3] # output_shape = [2]
Example 2
batch_dims = 0
data = [[0,1],[2,3]] # data_shape = [2, 2]
indices = [[1],[0]] # indices_shape = [2, 1]
output = [[2,3],[0,1]] # output_shape = [2, 2]
Example 3
batch_dims = 0
data = [[[0,1],[2,3]],[[4,5],[6,7]]] # data_shape = [2, 2, 2]
indices = [[0,1],[1,0]] # indices_shape = [2, 2]
output = [[2,3],[4,5]] # output_shape = [2, 2]
Example 4
batch_dims = 0
data = [[[0,1],[2,3]],[[4,5],[6,7]]] # data_shape = [2, 2, 2]
indices = [[[0,1]],[[1,0]]] # indices_shape = [2, 1, 2]
output = [[[2,3]],[[4,5]]] # output_shape = [2, 1, 2]
Example 5
batch_dims = 1
data = [[[0,1],[2,3]],[[4,5],[6,7]]] # data_shape = [2, 2, 2]
indices = [[1],[0]] # indices_shape = [2, 1]
output = [[2,3],[4,5]] # output_shape = [2, 2]
Attributes¶
batch_dims - INT (default is
'0'):The number of batch dimensions. The gather of indexing starts from dimension of data[batch_dims:]
Inputs¶
data (heterogeneous) - T:
Tensor of rank r >= 1.
indices (heterogeneous) - tensor(int64):
Tensor of rank q >= 1. All index values are expected to be within bounds [-s, s-1] along axis of size s. It is an error if any of the index values are out of bounds.
Outputs¶
output (heterogeneous) - T:
Tensor of rank q + r - indices_shape[-1] - 1.
Type Constraints¶
T in (
tensor(bfloat16),tensor(bool),tensor(complex128),tensor(complex64),tensor(double),tensor(float),tensor(float16),tensor(int16),tensor(int32),tensor(int64),tensor(int8),tensor(string),tensor(uint16),tensor(uint32),tensor(uint64),tensor(uint8)):Constrain input and output types to any tensor type.
GatherND - 12¶
Version¶
name: GatherND (GitHub)
domain:
mainsince_version:
12function:
Falsesupport_level:
SupportType.COMMONshape inference:
True
This version of the operator has been available since version 12.
Summary¶
Given data tensor of rank r >= 1, indices tensor of rank q >= 1, and batch_dims integer b, this operator gathers
slices of data into an output tensor of rank q + r - indices_shape[-1] - 1 - b.
indices is an q-dimensional integer tensor, best thought of as a (q-1)-dimensional tensor of index-tuples into data,
where each element defines a slice of data
batch_dims (denoted as b) is an integer indicating the number of batch dimensions, i.e the leading b number of dimensions of
data tensor and indices are representing the batches, and the gather starts from the b+1 dimension.
Some salient points about the inputs’ rank and shape:
r >= 1 and q >= 1 are to be honored. There is no dependency condition to be met between ranks
randqThe first
bdimensions of the shape ofindicestensor anddatatensor must be equal.b < min(q, r) is to be honored.
The
indices_shape[-1]should have a value between 1 (inclusive) and rankr-b(inclusive)All values in
indicesare expected to be within bounds [-s, s-1] along axis of sizes(i.e.)-data_shape[i] <= indices[...,i] <= data_shape[i] - 1. It is an error if any of the index values are out of bounds.
The output is computed as follows:
The output tensor is obtained by mapping each index-tuple in the indices tensor to the corresponding slice of the input data.
If
indices_shape[-1] > r-b=> error conditionIf
indices_shape[-1] == r-b, since the rank ofindicesisq,indicescan be thought of asN(q-b-1)-dimensional tensors containing 1-D tensors of dimensionr-b, whereNis an integer equals to the product of 1 and all the elements in the batch dimensions of the indices_shape. Let us think of each suchr-branked tensor asindices_slice. Each scalar value corresponding todata[0:b-1,indices_slice]is filled into the corresponding location of the(q-b-1)-dimensional tensor to form theoutputtensor (Example 1 below)If
indices_shape[-1] < r-b, since the rank ofindicesisq,indicescan be thought of asN(q-b-1)-dimensional tensor containing 1-D tensors of dimension< r-b. Let us think of each such tensors asindices_slice. Each tensor slice corresponding todata[0:b-1, indices_slice , :]is filled into the corresponding location of the(q-b-1)-dimensional tensor to form theoutputtensor (Examples 2, 3, 4 and 5 below)
This operator is the inverse of ScatterND.
Example 1
batch_dims = 0
data = [[0,1],[2,3]] # data_shape = [2, 2]
indices = [[0,0],[1,1]] # indices_shape = [2, 2]
output = [0,3] # output_shape = [2]
Example 2
batch_dims = 0
data = [[0,1],[2,3]] # data_shape = [2, 2]
indices = [[1],[0]] # indices_shape = [2, 1]
output = [[2,3],[0,1]] # output_shape = [2, 2]
Example 3
batch_dims = 0
data = [[[0,1],[2,3]],[[4,5],[6,7]]] # data_shape = [2, 2, 2]
indices = [[0,1],[1,0]] # indices_shape = [2, 2]
output = [[2,3],[4,5]] # output_shape = [2, 2]
Example 4
batch_dims = 0
data = [[[0,1],[2,3]],[[4,5],[6,7]]] # data_shape = [2, 2, 2]
indices = [[[0,1]],[[1,0]]] # indices_shape = [2, 1, 2]
output = [[[2,3]],[[4,5]]] # output_shape = [2, 1, 2]
Example 5
batch_dims = 1
data = [[[0,1],[2,3]],[[4,5],[6,7]]] # data_shape = [2, 2, 2]
indices = [[1],[0]] # indices_shape = [2, 1]
output = [[2,3],[4,5]] # output_shape = [2, 2]
Attributes¶
batch_dims - INT (default is
'0'):The number of batch dimensions. The gather of indexing starts from dimension of data[batch_dims:]
Inputs¶
data (heterogeneous) - T:
Tensor of rank r >= 1.
indices (heterogeneous) - tensor(int64):
Tensor of rank q >= 1. All index values are expected to be within bounds [-s, s-1] along axis of size s. It is an error if any of the index values are out of bounds.
Outputs¶
output (heterogeneous) - T:
Tensor of rank q + r - indices_shape[-1] - 1.
Type Constraints¶
T in (
tensor(bool),tensor(complex128),tensor(complex64),tensor(double),tensor(float),tensor(float16),tensor(int16),tensor(int32),tensor(int64),tensor(int8),tensor(string),tensor(uint16),tensor(uint32),tensor(uint64),tensor(uint8)):Constrain input and output types to any tensor type.
GatherND - 11¶
Version¶
name: GatherND (GitHub)
domain:
mainsince_version:
11function:
Falsesupport_level:
SupportType.COMMONshape inference:
True
This version of the operator has been available since version 11.
Summary¶
Given data tensor of rank r >= 1, and indices tensor of rank q >= 1, this operator gathers
slices of data into an output tensor of rank q + r - indices_shape[-1] - 1.
indices is an q-dimensional integer tensor, best thought of as a (q-1)-dimensional tensor of index-tuples into data,
where each element defines a slice of data
Some salient points about the inputs’ rank and shape:
r >= 1 and q >= 1 are to be honored. There is no dependency condition to be met between ranks
randqThe
indices_shape[-1]should have a value between 1 (inclusive) and rankr(inclusive)All values in
indicesare expected to be within bounds [-s, s-1] along axis of sizes(i.e.)-data_shape[i] <= indices[...,i] <= data_shape[i] - 1. It is an error if any of the index values are out of bounds.
The output is computed as follows:
The output tensor is obtained by mapping each index-tuple in the indices tensor to the corresponding slice of the input data.
If
indices_shape[-1] > r=> error conditionIf
indices_shape[-1] == r, since the rank ofindicesisq,indicescan be thought of as a(q-1)-dimensional tensor containing 1-D tensors of dimensionr. Let us think of each suchrranked tensor asindices_slice. Each scalar value corresponding todata[indices_slice]is filled into the corresponding location of the(q-1)-dimensional tensor to form theoutputtensor (Example 1 below)If
indices_shape[-1] < r, since the rank ofindicesisq,indicescan be thought of as a(q-1)-dimensional tensor containing 1-D tensors of dimension< r. Let us think of each such tensors asindices_slice. Each tensor slice corresponding todata[indices_slice , :]is filled into the corresponding location of the(q-1)-dimensional tensor to form theoutputtensor (Examples 2, 3, and 4 below)
This operator is the inverse of ScatterND.
Example 1
data = [[0,1],[2,3]] # data_shape = [2, 2]
indices = [[0,0],[1,1]] # indices_shape = [2, 2]
output = [0,3] # output_shape = [2]
Example 2
data = [[0,1],[2,3]] # data_shape = [2, 2]
indices = [[1],[0]] # indices_shape = [2, 1]
output = [[2,3],[0,1]] # output_shape = [2, 2]
Example 3
data = [[[0,1],[2,3]],[[4,5],[6,7]]] # data_shape = [2, 2, 2]
indices = [[0,1],[1,0]] # indices_shape = [2, 2]
output = [[2,3],[4,5]] # output_shape = [2, 2]
Example 4
data = [[[0,1],[2,3]],[[4,5],[6,7]]] # data_shape = [2, 2, 2]
indices = [[[0,1]],[[1,0]]] # indices_shape = [2, 1, 2]
output = [[[2,3]],[[4,5]]] # output_shape = [2, 1, 2]
Inputs¶
data (heterogeneous) - T:
Tensor of rank r >= 1.
indices (heterogeneous) - tensor(int64):
Tensor of rank q >= 1. All index values are expected to be within bounds [-s, s-1] along axis of size s. It is an error if any of the index values are out of bounds.
Outputs¶
output (heterogeneous) - T:
Tensor of rank q + r - indices_shape[-1] - 1.
Type Constraints¶
T in (
tensor(bool),tensor(complex128),tensor(complex64),tensor(double),tensor(float),tensor(float16),tensor(int16),tensor(int32),tensor(int64),tensor(int8),tensor(string),tensor(uint16),tensor(uint32),tensor(uint64),tensor(uint8)):Constrain input and output types to any tensor type.