octave: Index Expressions
8.1 Index Expressions
=====================
An “index expression” allows you to reference or extract selected
elements of a matrix or vector.
Indices may be scalars, vectors, ranges, or the special operator ‘:’,
which may be used to select entire rows or columns.
Vectors are indexed using a single index expression. Matrices (2-D)
and higher multi-dimensional arrays are indexed using either one index
or N indices where N is the dimension of the array. When using a single
index expression to index 2-D or higher data the elements of the array
are taken in column-first order (like Fortran).
The output from indexing assumes the dimensions of the index
expression. For example:
a(2) # result is a scalar
a(1:2) # result is a row vector
a([1; 2]) # result is a column vector
As a special case, when a colon is used as a single index, the output
is a column vector containing all the elements of the vector or matrix.
For example:
a(:) # result is a column vector
a(:)' # result is a row vector
The above two code idioms are often used in place of ‘reshape’ when a
simple vector, rather than an arbitrarily sized array, is needed.
Given the matrix
a = [1, 2; 3, 4]
all of the following expressions are equivalent and select the first row
of the matrix.
a(1, [1, 2]) # row 1, columns 1 and 2
a(1, 1:2) # row 1, columns in range 1-2
a(1, :) # row 1, all columns
In index expressions the keyword ‘end’ automatically refers to the
last entry for a particular dimension. This magic index can also be
used in ranges and typically eliminates the needs to call ‘size’ or
‘length’ to gather array bounds before indexing. For example:
a = [1, 2, 3, 4];
a(1:end/2) # first half of a => [1, 2]
a(end + 1) = 5; # append element
a(end) = []; # delete element
a(1:2:end) # odd elements of a => [1, 3]
a(2:2:end) # even elements of a => [2, 4]
a(end:-1:1) # reversal of a => [4, 3, 2 , 1]
Menu