SUB2IND Convert Multiple Indexing To Linear Indexing

Section: Elementary Functions

Usage

The sub2ind function converts a multi-dimensional indexing expression into a linear (or vector) indexing expression. The syntax for its use is
   y = sub2ind(sizevec,d1,d2,...,dn)

where sizevec is the size of the array being indexed into, and each di is a vector of the same length, containing index values. The basic idea behind sub2ind is that it makes

  [z(d1(1),d2(1),...,dn(1)),...,z(d1(n),d2(n),...,dn(n))]

equivalent to

  z(sub2ind(size(z),d1,d2,...,dn))

where the later form is using vector indexing, and the former one is using native, multi-dimensional indexing.

Example

Suppose we have a simple 3 x 4 matrix A containing some random integer elements
--> A = randi(ones(3,4),10*ones(3,4))

A = 
  2  1  4  2 
  8 10  4  7 
 10  7  4 10 

We can extract the elements (1,3),(2,3),(3,4) of A via sub2ind. To calculate which elements of A this corresponds to, we can use sub2ind as

--> n = sub2ind(size(A),1:3,2:4)

n = 
  4  8 12 

--> A(n)

ans = 
  1  4 10