现在的位置: 首页 > 综合 > 正文

sub2ind – Convert subscripts to linear indices

2013年09月19日 ⁄ 综合 ⁄ 共 2494字 ⁄ 字号 评论关闭
文章目录

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

抱歉!评论已关闭.