normalized_index_expression¶
- odl.util.normalize.normalized_index_expression(indices, shape, int_to_slice=False)[source]¶
Enable indexing with almost Numpy-like capabilities.
Implements the following features:
Usage of general slices and sequences of slices
Conversion of
Ellipsis
into an adequate number ofslice(None)
objectsFewer indices than axes by filling up with an
Ellipsis
Error checking with respect to a given shape
Conversion of integer indices into corresponding slices
- Parameters:
- Returns:
- normalizedtuple of ints or
slice
's Normalized index expression
- normalizedtuple of ints or
Examples
Sequences are turned into tuples. We can have at most as many entries as the length of
shape
, but fewer are allowed - the remaining list places are filled up byslice(None)
:>>> normalized_index_expression([1, 2, 3], shape=(3, 4, 5)) (1, 2, 3) >>> normalized_index_expression([1, 2], shape=(3, 4, 5)) (1, 2, slice(None, None, None)) >>> normalized_index_expression([slice(2), 2], shape=(3, 4, 5)) (slice(None, 2, None), 2, slice(None, None, None)) >>> normalized_index_expression([1, Ellipsis], shape=(3, 4, 5)) (1, slice(None, None, None), slice(None, None, None))
By default, integer indices are kept. If they should be converted to slices, use
int_to_slice=True
. This can be useful to guarantee that the result of slicing with the returned object is of the same type as the array into which is sliced and has the same number of axes:>>> x = np.zeros(shape=(3, 4, 5)) >>> idx1 = normalized_index_expression([1, 2, 3], shape=(3, 4, 5), ... int_to_slice=True) >>> idx1 (slice(1, 2, None), slice(2, 3, None), slice(3, 4, None)) >>> x[idx1] array([[[ 0.]]]) >>> idx2 = normalized_index_expression([1, 2, 3], shape=(3, 4, 5), ... int_to_slice=False) >>> idx2 (1, 2, 3) >>> x[idx2] 0.0