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
本文详细解释了MATLAB中的sub2ind函数,该函数用于将矩阵的子坐标转换为线性索引。通过提供具体的例子,文章演示了如何使用此函数,包括在三维数组上的应用以及如何指定不同的维度子坐标。

被折叠的 条评论
为什么被折叠?



