Slice¶
Slice - 13¶
Version¶
name: Slice (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¶
Produces a slice of the input tensor along multiple axes. Similar to numpy: https://numpy.org/doc/stable/user/basics.indexing.html?highlight=slice#slicing-and-striding
Slice uses the starts
, ends
, axes
and steps
inputs to select a sub-tensor
of its input data
tensor.
An effective starts[i]
, ends[i]
, and steps[i]
must be computed for each i
in [0, ... r-1]
where r = rank(input)
as follows:
If axes
are omitted, they are set to [0, ..., r-1]
.
If steps
are omitted, they are set to [1, ..., 1]
of length len(starts)
The effective values are initialized as start[i] = 0
, ends[i] = dims[i]
where
dims
are the dimensions of input
and steps[i] = 1
.
All negative elements of axes
are made non-negative by adding r
to them, where
r =rank(input)
.
All negative values in starts[i]
and ends[i]
have dims[axes[i]]
added to them,
where dims
are the dimensions of input
. Then start[axes[i]]
is the adjusted
starts[i]
is clamped into the range [0, dims[axes[i]]]
for positive stepping
and [0, dims[axes[i]]-1]
for negative stepping.
The clamping for the adjusted ends[i]
depends on the sign of steps[i]
and must
accommodate copying 0 through dims[axes[i]]
elements, so for positive stepping
ends[axes[i]]
is clamped to [0, dims[axes[i]]]
, while for negative stepping it
is clamped to [-1, dims[axes[i]]-1]
.
Finally, steps[axes[i]] = steps[i]
.
For slicing to the end of a dimension with unknown size, it is recommended to pass
in INT_MAX
when slicing forward and ‘INT_MIN’ when slicing backward.
Example 1:
data = [
[1, 2, 3, 4],
[5, 6, 7, 8],
]
axes = [0, 1]
starts = [1, 0]
ends = [2, 3]
steps = [1, 2]
result = [
[5, 7],
]
Example 2:
data = [
[1, 2, 3, 4],
[5, 6, 7, 8],
]
starts = [0, 1]
ends = [-1, 1000]
result = [
[2, 3, 4],
]
Inputs¶
Between 3 and 5 inputs.
data (heterogeneous) - T:
Tensor of data to extract slices from.
starts (heterogeneous) - Tind:
1-D tensor of starting indices of corresponding axis in
axes
ends (heterogeneous) - Tind:
1-D tensor of ending indices (exclusive) of corresponding axis in
axes
axes (optional, heterogeneous) - Tind:
1-D tensor of axes that
starts
andends
apply to. Negative value means counting dimensions from the back. Accepted range is [-r, r-1] where r = rank(data). Behavior is undefined if an axis is repeated.steps (optional, heterogeneous) - Tind:
1-D tensor of slice step of corresponding axis in
axes
. Negative value means slicing backward. ‘steps’ cannot be 0. Defaults to 1s.
Outputs¶
output (heterogeneous) - T:
Sliced data tensor.
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 all tensor types.
Tind in (
tensor(int32)
,tensor(int64)
):Constrain indices to integer types
Slice - 11¶
Version¶
name: Slice (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¶
Produces a slice of the input tensor along multiple axes. Similar to numpy:
https://numpy.org/doc/stable/reference/routines.indexing.html
Slices uses starts
, ends
, axes
and steps
inputs to specify the start and end
dimension and step for each axis in the list of axes, it uses this information to
slice the input data
tensor. If a negative value is passed for any of the
start or end indices, it represents number of elements before the end of that
dimension. If the value passed to start or end is larger than the n
(the
number of elements in this dimension), it represents n
. For slicing to the
end of a dimension with unknown size, it is recommended to pass in INT_MAX
when slicing forward and ‘INT_MIN’ when slicing backward.
If a negative value is passed for step, it represents slicing backward.
However step value cannot be 0.
If axes
are omitted, they are set to [0, ..., ndim-1]
.
If steps
are omitted, they are set to [1, ..., 1]
of length len(starts)
Example 1:
data = [
[1, 2, 3, 4],
[5, 6, 7, 8],
]
axes = [0, 1]
starts = [1, 0]
ends = [2, 3]
steps = [1, 2]
result = [
[5, 7],
]
Example 2:
data = [
[1, 2, 3, 4],
[5, 6, 7, 8],
]
starts = [0, 1]
ends = [-1, 1000]
result = [
[2, 3, 4],
]
Inputs¶
Between 3 and 5 inputs.
data (heterogeneous) - T:
Tensor of data to extract slices from.
starts (heterogeneous) - Tind:
1-D tensor of starting indices of corresponding axis in
axes
ends (heterogeneous) - Tind:
1-D tensor of ending indices (exclusive) of corresponding axis in
axes
axes (optional, heterogeneous) - Tind:
1-D tensor of axes that
starts
andends
apply to. Negative value means counting dimensions from the back. Accepted range is [-r, r-1] where r = rank(data).steps (optional, heterogeneous) - Tind:
1-D tensor of slice step of corresponding axis in
axes
. Negative value means slicing backward. ‘steps’ cannot be 0. Defaults to 1.
Outputs¶
output (heterogeneous) - T:
Sliced data tensor.
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 all tensor types.
Tind in (
tensor(int32)
,tensor(int64)
):Constrain indices to integer types
Slice - 10¶
Version¶
name: Slice (GitHub)
domain:
main
since_version:
10
function:
False
support_level:
SupportType.COMMON
shape inference:
True
This version of the operator has been available since version 10.
Summary¶
Produces a slice of the input tensor along multiple axes. Similar to numpy:
https://numpy.org/doc/stable/reference/routines.indexing.html
Slices uses starts
, ends
, axes
and steps
inputs to specify the start and end
dimension and step for each axis in the list of axes, it uses this information to
slice the input data
tensor. If a negative value is passed for any of the
start or end indices, it represent number of elements before the end of that
dimension. If the value passed to start or end is larger than the n
(the
number of elements in this dimension), it represents n
. For slicing to the
end of a dimension with unknown size, it is recommended to pass in INT_MAX
.
If a negative value is passed for step, it represents slicing backward.
If axes
are omitted, they are set to [0, ..., ndim-1]
.
If steps
are omitted, they are set to [1, ..., 1]
of length len(starts)
Example 1:
data = [
[1, 2, 3, 4],
[5, 6, 7, 8],
]
axes = [0, 1]
starts = [1, 0]
ends = [2, 3]
steps = [1, 2]
result = [
[5, 7],
]
Example 2:
data = [
[1, 2, 3, 4],
[5, 6, 7, 8],
]
starts = [0, 1]
ends = [-1, 1000]
result = [
[2, 3, 4],
]
Inputs¶
Between 3 and 5 inputs.
data (heterogeneous) - T:
Tensor of data to extract slices from.
starts (heterogeneous) - Tind:
1-D tensor of starting indices of corresponding axis in
axes
ends (heterogeneous) - Tind:
1-D tensor of ending indices (exclusive) of corresponding axis in
axes
axes (optional, heterogeneous) - Tind:
1-D tensor of axes that
starts
andends
apply to.steps (optional, heterogeneous) - Tind:
1-D tensor of slice step of corresponding axis in
axes
. Default to 1.
Outputs¶
output (heterogeneous) - T:
Sliced data tensor.
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 all tensor types.
Tind in (
tensor(int32)
,tensor(int64)
):Constrain indices to integer types
Slice - 1¶
Version¶
name: Slice (GitHub)
domain:
main
since_version:
1
function:
False
support_level:
SupportType.COMMON
shape inference:
True
This version of the operator has been available since version 1.
Summary¶
Produces a slice of the input tensor along multiple axes. Similar to numpy:
https://numpy.org/doc/stable/reference/routines.indexing.html
Slices uses axes
, starts
and ends
attributes to specify the start and end
dimension for each axis in the list of axes, it uses this information to
slice the input data
tensor. If a negative value is passed for any of the
start or end indices, it represent number of elements before the end of that
dimension. If the value passed to start or end is larger than the n
(the
number of elements in this dimension), it represents n
. For slicing to the
end of a dimension with unknown size, it is recommended to pass in INT_MAX
.
If axes
are omitted, they are set to [0, ..., ndim-1]
.
Example 1:
data = [
[1, 2, 3, 4],
[5, 6, 7, 8],
]
axes = [0, 1]
starts = [1, 0]
ends = [2, 3]
result = [
[5, 6, 7],
]
Example 2:
data = [
[1, 2, 3, 4],
[5, 6, 7, 8],
]
starts = [0, 1]
ends = [-1, 1000]
result = [
[2, 3, 4],
]
Attributes¶
axes - INTS :
Axes that
starts
andends
apply to. It’s optional. If not present, will be treated as [0, 1, …, len(starts
) - 1].ends - INTS (required) :
Ending indices (exclusive) of corresponding axis in axes`
starts - INTS (required) :
Starting indices of corresponding axis in
axes
Inputs¶
data (heterogeneous) - T:
Tensor of data to extract slices from.
Outputs¶
output (heterogeneous) - T:
Sliced data tensor.
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 all tensor types.