View source on GitHub |
Extracts a strided slice of a tensor (generalized python array indexing).
tf.strided_slice( input_, begin, end, strides=None, begin_mask=0, end_mask=0, ellipsis_mask=0, new_axis_mask=0, shrink_axis_mask=0, var=None, name=None )
Instead of calling this op directly most users will want to use the NumPy-style slicing syntax (e.g. tensor[..., 3:4:-1, tf.newaxis, 3]
), which is supported via tf.Tensor.getitem
and tf.Variable.getitem
. The interface of this op is a low-level encoding of the slicing syntax.
Roughly speaking, this op extracts a slice of size (end-begin)/stride
from the given input_
tensor. Starting at the location specified by begin
the slice continues by adding stride
to the index until all dimensions are not less than end
. Note that a stride can be negative, which causes a reverse slice.
Given a Python slice input[spec0, spec1, ..., specn]
, this function will be called as follows.
begin
, end
, and strides
will be vectors of length n. n in general is not equal to the rank of the input_
tensor.
In each mask field (begin_mask
, end_mask
, ellipsis_mask
, new_axis_mask
, shrink_axis_mask
) the ith bit will correspond to the ith spec.
If the ith bit of begin_mask
is set, begin[i]
is ignored and the fullest possible range in that dimension is used instead. end_mask
works analogously, except with the end range.
foo[5:,:,:3]
on a 7x8x9 tensor is equivalent to foo[5:7,0:8,0:3]
. foo[::-1]
reverses a tensor with shape 8.
If the ith bit of ellipsis_mask
is set, as many unspecified dimensions as needed will be inserted between other dimensions. Only one non-zero bit is allowed in ellipsis_mask
.
For example foo[3:5,...,4:5]
on a shape 10x3x3x10 tensor is equivalent to foo[3:5,:,:,4:5]
and foo[3:5,...]
is equivalent to foo[3:5,:,:,:]
.
If the ith bit of new_axis_mask
is set, then begin
, end
, and stride
are ignored and a new length 1 dimension is added at this point in the output tensor.
For example, foo[:4, tf.newaxis, :2]
would produce a shape (4, 1, 2)
tensor.
If the ith bit of shrink_axis_mask
is set, it implies that the ith specification shrinks the dimensionality by 1, taking on the value at index begin[i]
. end[i]
and strides[i]
are ignored in this case. For example in Python one might do foo[:, 3, :]
which would result in shrink_axis_mask
equal to 2.
Note:begin
andend
are zero-indexed.strides
entries must be non-zero.
t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]], [[5, 5, 5], [6, 6, 6]]]) tf.strided_slice(t, [1, 0, 0], [2, 1, 3], [1, 1, 1]) # [[[3, 3, 3]]] tf.strided_slice(t, [1, 0, 0], [2, 2, 3], [1, 1, 1]) # [[[3, 3, 3], # [4, 4, 4]]] tf.strided_slice(t, [1, -1, 0], [2, -3, 3], [1, -1, 1]) # [[[4, 4, 4], # [3, 3, 3]]]
Args | |
---|---|
input_ | A Tensor . |
begin | An int32 or int64 Tensor . |
end | An int32 or int64 Tensor . |
strides | An int32 or int64 Tensor . |
begin_mask | An int32 mask. |
end_mask | An int32 mask. |
ellipsis_mask | An int32 mask. |
new_axis_mask | An int32 mask. |
shrink_axis_mask | An int32 mask. |
var | The variable corresponding to input_ or None |
name | A name for the operation (optional). |
Returns | |
---|---|
A Tensor the same type as input . |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/strided_slice