Accelerating the pace of engineering and science

# Documentation Center

• Trial Software

# ind2sub

Subscripts from linear index

## Syntax

[I,J] = ind2sub(siz,IND)
[I1,I2,I3,...,In] = ind2sub(siz,IND)

## Description

The ind2sub command determines the equivalent subscript values corresponding to a single index into an array.

[I,J] = ind2sub(siz,IND) returns the matrices I and J containing the equivalent row and column subscripts corresponding to each linear index in the matrix IND for a matrix of size siz. siz is a vector with ndim(A) elements (in this case, 2), where siz(1) is the number of rows and siz(2) is the number of columns.

 Note   For matrices, [I,J] = ind2sub(size(A),find(A>5)) returns the same values as [I,J] = find(A>5).

[I1,I2,I3,...,In] = ind2sub(siz,IND) returns n subscript arrays I1,I2,...,In containing the equivalent multidimensional array subscripts equivalent to IND for an array of size siz. siz is an n-element vector that specifies the size of each array dimension.

## Examples

### Example 1 — Two-Dimensional Matrices

The mapping from linear indexes to subscript equivalents for a 3-by-3 matrix is

This code determines the row and column subscripts in a 3-by-3 matrix, of elements with linear indices 3, 4, 5, 6.

```IND = [3 4 5 6]
s = [3,3];
[I,J] = ind2sub(s,IND)

I =
3     1     2     3

J =
1     2     2     2```

### Example 2 — Three-Dimensional Matrices

The mapping from linear indexes to subscript equivalents for a 2-by-2-by-2 array is

This code determines the subscript equivalents in a 2-by-2-by-2 array, of elements whose linear indices 3, 4, 5, 6 are specified in the IND matrix.

```IND = [3 4;5 6];
s = [2,2,2];
[I,J,K] = ind2sub(s,IND)

I =
1     2
1     2

J =
2     2
1     1

K =
1     1
2     2```

### Example 3 — Effects of Returning Fewer Outputs

When calling ind2sub for an N-dimensional matrix, you would typically supply N output arguments in the call: one for each dimension of the matrix. This example shows what happens when you return three, two, and one output when calling ind2sub on a 3-dimensional matrix.

The matrix is 2-by-2-by-2 and the linear indices are 1 through 8:

```dims = [2 2 2];
indices = [1 2 3 4 5 6 7 8];```

The 3-output call to ind2sub returns the expected subscripts for the 2-by-2-by-2 matrix:

```[rowsub colsub pagsub] = ind2sub(dims, indices)
rowsub =
1     2     1     2     1     2     1     2
colsub =
1     1     2     2     1     1     2     2
pagsub =
1     1     1     1     2     2     2     2```

If you specify only two outputs (row and column), ind2sub still returns a subscript for each specified index, but drops the third dimension from the matrix, returning subscripts for a 2-dimensional, 2-by-4 matrix instead:

```[rowsub colsub] = ind2sub(dims, indices)
rowsub =
1     2     1     2     1     2     1     2
colsub =
1     1     2     2     3     3     4     4```

If you specify one output (row), ind2sub drops both the second and third dimensions from the matrix, and returns subscripts for a 1-dimensional, 1-by-8 matrix instead:

```[rowsub] = ind2sub(dims, indices)
rowsub =
1     2     3     4     5     6     7     8```