from http://www.mathworks.com/access/helpdesk/help/techdoc/ref/sub2ind.html
sub2ind -
Convert subscripts to linear indices
Syntax
linearInd
=
sub2ind(matrixSize
, rowSub
, colSub
)
linearInd
=
sub2ind(arraySize
, dim1Sub
, dim2Sub
,
dim3Sub
,
...)
Description
linearInd
=
sub2ind(matrixSize
, rowSub
, colSub
)
returns
the linear index equivalents to the row and column subscripts rowSub
and colSub
for
a matrix of size matrixSize
. The matrixSize
input
is a 2-element vector that specifies the number of rows and columns
in the matrix as [nRows
, nCols
].
The rowSub
and colSub
inputs
are positive, whole number scalars or vectors that specify one or
more row-column subscript pairs for the matrix. Example
3
demonstrates the use of
vectors for the rowSub
and colSub
inputs.
linearInd
=
sub2ind(arraySize
, dim1Sub
, dim2Sub
,
dim3Sub
,
...)
returns the linear index equivalents to the specified
subscripts for each dimension of an N-dimensional array of size arraySize
.
The arraySize
input is an n-element vector
that specifies the number of dimensions in the array. The dimNSub
inputs
are positive, whole number scalars or vectors that specify one or
more row-column subscripts for the matrix.
The rowSub
and colSub
inputs
must belong to the same class. The linearInd
output
is the same class as the subscript inputs.
If needed, sub2ind
assumes that unspecified
trailing subscripts are 1. See Example
2
, below.
Examples
Example 1
This
example converts the subscripts (2, 1, 2) for three-dimensional
array A
to a single linear index. Start by creating
a 3-by-4-by-2 array A
:
rand('state', 0); % Initialize random number generator.
A = rand(3, 4, 2)
A(:,:,1) =
0.9501 0.4860 0.4565 0.4447
0.2311 0.8913 0.0185 0.6154
0.6068 0.7621 0.8214 0.7919
A(:,:,2) =
0.9218 0.4057 0.4103 0.3529
0.7382 0.9355 0.8936 0.8132
0.1763 0.9169 0.0579 0.0099
Find the linear index
corresponding to (2, 1, 2):
linearInd = sub2ind(size(A), 2, 1, 2)
linearInd =
14
Make sure that these agree:
A(2, 1, 2) A(14)
ans = and =
0.7382 0.7382
Example 2
Using the
3-dimensional array A
defined in
the previous example, specify only 2 of the 3 subscript arguments
in the call to sub2ind
. The third subscript argument
defaults to 1.
The command
linearInd = sub2ind(size(A), 2, 4)
ans =
11
is the same as
linearInd = sub2ind(size(A), 2, 4, 1)
ans =
11
Example 3
Using the same
3-dimensional input array A
as
in Example 1, accomplish the work of five separate sub2ind
commands
with just one.
Replace the following commands:
sub2ind(size(A), 3, 3, 2);
sub2ind(size(A), 2, 4, 1);
sub2ind(size(A), 3, 1, 2);
sub2ind(size(A), 1, 3, 2);
sub2ind(size(A), 2, 4, 1);
with a single command:
sub2ind(size(A), [3 2 3 1 2], [3 4 1 3 4], [2 1 2 2 1])
ans =
21 11 15 19 11
Verify that these linear indices
access the same array elements
as their subscripted counterparts:
[A(3,3,2), A(2,4,1), A(3,1,2), A(1,3,2), A(2,4,1)]
ans =
0.0579 0.6154 0.1763 0.4103 0.6154
A([21, 11, 15, 19, 11])
ans =
0.0579 0.6154 0.1763 0.4103 0.6154