GatherND¶
GatherND - 13¶
Version¶
name: GatherND (GitHub)
domain:
main
since_version:
13
function:
False
support_level:
SupportType.COMMON
shape 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
r
andq
The first
b
dimensions of the shape ofindices
tensor anddata
tensor 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
indices
are 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 ofindices
isq
,indices
can be thought of asN
(q-b-1)
-dimensional tensors containing 1-D tensors of dimensionr-b
, whereN
is 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-b
ranked 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 theoutput
tensor (Example 1 below)If
indices_shape[-1] < r-b
, since the rank ofindices
isq
,indices
can 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 theoutput
tensor (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:
main
since_version:
12
function:
False
support_level:
SupportType.COMMON
shape 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
r
andq
The first
b
dimensions of the shape ofindices
tensor anddata
tensor 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
indices
are 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 ofindices
isq
,indices
can be thought of asN
(q-b-1)
-dimensional tensors containing 1-D tensors of dimensionr-b
, whereN
is 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-b
ranked 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 theoutput
tensor (Example 1 below)If
indices_shape[-1] < r-b
, since the rank ofindices
isq
,indices
can 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 theoutput
tensor (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:
main
since_version:
11
function:
False
support_level:
SupportType.COMMON
shape 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
r
andq
The
indices_shape[-1]
should have a value between 1 (inclusive) and rankr
(inclusive)All values in
indices
are 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 ofindices
isq
,indices
can be thought of as a(q-1)
-dimensional tensor containing 1-D tensors of dimensionr
. Let us think of each suchr
ranked tensor asindices_slice
. Each scalar value corresponding todata[indices_slice]
is filled into the corresponding location of the(q-1)
-dimensional tensor to form theoutput
tensor (Example 1 below)If
indices_shape[-1] < r
, since the rank ofindices
isq
,indices
can 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 theoutput
tensor (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.