A scalar index or the start
and stop of an index range may be non-positive to reference the
elements near the end of a dimension. Hence, 0 refers to the final element,
-1 refers to the next to last element, -2 to the element before that, and
so on. For example,
x(2:-1) refers to all but the first
and last elements of the 1-D array x. This convention does NOT
work for an index list.
A range function ifunc may
be followed by a colon and an index range start:stop or start:stop:step
in order to restrict the indices to which the range function applies to
a subset of the entire dimension. Hence, x(min:2:-1) returns
the minimum of all the elements of the 1-D array x, excluding the
first and last elements.
An index specified as a scalar,
the start or stop of an index range, or an element of
an index list may exceed the length of the indexed dimension ID,
provided that the entire indexing operation does not overreach the bounds
of the array. Thus, if yis a 5-by-6 array, then y(22)
refers to the same datum as y(2,5).
The expression z(..)
- using the rubber-index operator .. - refers to the entire array
z.
This is occasionally useful as the left hand side of an assignment statement
in order to force broadcasting and type conversion of the right hand expression
to the preallocated type and shape z.
The expression z(*)
- using the rubber-index operator * - collapses a multidimensional
array z into a one-dimensional array. Even more useful as z(*,)
to preserve the final index of an array and force a two-dimensional result.