description: Return a strided slice from input.

robots: noindex

tf.raw_ops.StridedSlice

Return a strided slice from input.

Note, most python users will want to use the Python Tensor.__getitem__ or Variable.__getitem__ rather than this op directly.

The goal of this op is to produce a new tensor with a subset of the elements from the n dimensional input tensor. The subset is chosen using a sequence of m sparse range specifications encoded into the arguments of this function. Note, in some cases m could be equal to n, but this need not be the case. Each range specification entry can be one of the following:

Each conceptual range specification is encoded in the op's argument. This encoding is best understand by considering a non-trivial example. In particular, foo[1, 2:4, None, ..., :-3:-1, :] will be encoded as

begin = [1, 2, x, x, 0, x] # x denotes don't care (usually 0)
end = [2, 4, x, x, -3, x]
strides = [1, 1, x, x, -1, 1]
begin_mask = 1<<4 | 1<<5 = 48
end_mask = 1<<5 = 32
ellipsis_mask = 1<<3 = 8
new_axis_mask = 1<<2 = 4
shrink_axis_mask = 1<<0 = 1

In this case if foo.shape is (5, 5, 5, 5, 5, 5) the final shape of the slice becomes (2, 1, 5, 5, 2, 5). Let us walk step by step through each argument specification.

  1. The first argument in the example slice is turned into begin = 1 and end = begin + 1 = 2. To disambiguate from the original spec 2:4 we also set the appropriate bit in shrink_axis_mask.

  2. 2:4 is contributes 2, 4, 1 to begin, end, and stride. All masks have zero bits contributed.

  3. None is a synonym for tf.newaxis. This means insert a dimension of size 1 dimension in the final shape. Dummy values are contributed to begin, end and stride, while the new_axis_mask bit is set.

  4. ... grab the full ranges from as many dimensions as needed to fully specify a slice for every dimension of the input shape.

  5. :-3:-1 shows the use of negative indices. A negative index i associated with a dimension that has shape s is converted to a positive index s + i. So -1 becomes s-1 (i.e. the last element). This conversion is done internally so begin, end and strides receive x, -3, and -1. The appropriate begin_mask bit is set to indicate the start range is the full range (ignoring the x).

  6. : indicates that the entire contents of the corresponding dimension is selected. This is equivalent to :: or 0::1. begin, end, and strides receive 0, 0, and 1, respectively. The appropriate bits in begin_mask and end_mask are also set.

Requirements: 0 != strides[i] for i in [0, m) ellipsis_mask must be a power of two (only one ellipsis)

input A Tensor.
begin A Tensor. Must be one of the following types: int32, int64. begin[k] specifies the offset into the kth range specification. The exact dimension this corresponds to will be determined by context. Out-of-bounds values will be silently clamped. If the kth bit of begin_mask then begin[k] is ignored and the full range of the appropriate dimension is used instead. Negative values causes indexing to start from the highest element e.g. If foo==[1,2,3] then foo[-1]==3.
end A Tensor. Must have the same type as begin. end[i] is like begin with the exception that end_mask is used to determine full ranges.
strides A Tensor. Must have the same type as begin. strides[i] specifies the increment in the ith specification after extracting a given element. Negative indices will reverse the original order. Out or range values are clamped to [0,dim[i]) if slice[i]>0 or [-1,dim[i]-1] if slice[i] < 0
begin_mask An optional int. Defaults to 0. a bitmask where a bit i being 1 means to ignore the begin value and instead use the largest interval possible. At runtime begin[i] will be replaced with [0, n-1) if stride[i] > 0 or [-1, n-1] if stride[i] < 0
end_mask An optional int. Defaults to 0. analogous to begin_mask
ellipsis_mask An optional int. Defaults to 0. a bitmask where bit i being 1 means the ith position is actually an ellipsis. One bit at most can be 1. If ellipsis_mask == 0, then an implicit ellipsis mask of 1 << (m+1) is provided. This means that foo[3:5] == foo[3:5, ...]. An ellipsis implicitly creates as many range specifications as necessary to fully specify the sliced range for every dimension. For example for a 4-dimensional tensor foo the slice foo[2, ..., 5:8] implies foo[2, :, :, 5:8].
new_axis_mask An optional int. Defaults to 0. a bitmask where bit i being 1 means the ith specification creates a new shape 1 dimension. For example foo[:4, tf.newaxis, :2] would produce a shape (4, 1, 2) tensor.
shrink_axis_mask An optional int. Defaults to 0. a bitmask where bit i implies that the ith specification should shrink the dimensionality. begin and end must imply a slice of size 1 in the dimension. For example in python one might do foo[:, 3, :] which would result in shrink_axis_mask being 2.
name A name for the operation (optional).

A Tensor. Has the same type as input.