## Indexing vectors and arrays in Matlab

August 24, 2011 at 07:25 PM | categories: basic matlab | View Comments

# Indexing vectors and arrays in Matlab

There are times where you have a lot of data in a vector or array and you want to extract a portion of the data for some analysis. For example, maybe you want to plot column 1 vs column 2, or you want the integral of data between x = 4 and x = 6, but your vector covers 0 < x < 10. Indexing is the way to do these things.

A key point to remember is that in Matlab array/vector indices start at 1.

## Contents

we use the parentheses operator to index. It is possible to get a single element, a range of elements, or all the elements.

x = linspace(0,pi,10)

x = Columns 1 through 7 0 0.3491 0.6981 1.0472 1.3963 1.7453 2.0944 Columns 8 through 10 2.4435 2.7925 3.1416

```
x(1) % element 1
```

ans = 0

```
x(3) % element 3
```

ans = 0.6981

```
x(1:3) % elements 1-3
```

ans = 0 0.3491 0.6981

```
x(end) % the last element
```

ans = 3.1416

the syntax a:n:b gets the elements starting at index a, skipping n elements up to the index b

```
x(1:3:end) % every third element
```

ans = 0 1.0472 2.0944 3.1416

```
x(:) % getting all the elements. :note:`you get a column vector.`
```

ans = 0 0.3491 0.6981 1.0472 1.3963 1.7453 2.0944 2.4435 2.7925 3.1416

## finding part of vector

suppose we want the part of the vector where x > 2. We could do that by inspection, but there is a better way. We can create a mask of boolean (0 or 1) values that specify whether x > 2 or not, and then use the mask

```
ind = x > 2
x(ind) % use indexing to get the part of x where x > 2
```

ind = 0 0 0 0 0 0 1 1 1 1 ans = 2.0944 2.4435 2.7925 3.1416

we can use the mask on other vectors too, to get the y-values where x > 2, for example, and then to integrate that subsection of data (or some other analysis).

y = sin(x) y(ind) trapz(y(ind),x(ind))

y = Columns 1 through 7 0 0.3420 0.6428 0.8660 0.9848 0.9848 0.8660 Columns 8 through 10 0.6428 0.3420 0.0000 ans = 0.8660 0.6428 0.3420 0.0000 ans = -2.3087

## 2D array indexing

in a 2D array, you index with (row,column)

a = [[1 2 3];[4 5 6]; [7 8 9]]

a = 1 2 3 4 5 6 7 8 9

a(1,1) % upper left element a(end,end) % lower right element

ans = 1 ans = 9

## getting a row

to get a row, we specify the row number we want, and we need a syntax to specify every column index in that row. The syntax is to use a colon

```
a(1,:) % first row
```

ans = 1 2 3

## getting a column

```
a(:,1) % first column
```

ans = 1 4 7

```
a(:) % all the elements of the a array as a column vector
```

ans = 1 4 7 2 5 8 3 6 9

## using indexing to assign values to rows and columns

b = zeros(size(a))

b = 0 0 0 0 0 0 0 0 0

```
b(:,1) = [1 2 3] % define column 1
```

b = 1 0 0 2 0 0 3 0 0

```
b(2,:) = [4 5 6] % define row 2
```

b = 1 0 0 4 5 6 3 0 0

```
b(3,3) = 9 % define element (3,3)
```

b = 1 0 0 4 5 6 3 0 9

```
b(9) = 12 % this redefines element (3,3)
```

b = 1 0 0 4 5 6 3 0 12

## 3D arrays

the 3d array is like book of 2D matrices. Each page has a 2D matrix on it. think about the indexing like this: (row, column, page)

```
M = randn(3,3,3) % a 3x3x3 array
```

M(:,:,1) = 1.7119 -0.8396 0.9610 -0.1941 1.3546 0.1240 -2.1384 -1.0722 1.4367 M(:,:,2) = -1.9609 2.9080 -1.0582 -0.1977 0.8252 -0.4686 -1.2078 1.3790 -0.2725 M(:,:,3) = 1.0984 -2.0518 -1.5771 -0.2779 -0.3538 0.5080 0.7015 -0.8236 0.2820

```
M(:,:,1) % 2D array on page 1
```

ans = 1.7119 -0.8396 0.9610 -0.1941 1.3546 0.1240 -2.1384 -1.0722 1.4367

```
M(:,1,1) % column 1 of array on page 1
```

ans = 1.7119 -0.1941 -2.1384

```
M(2,:,2) % row 2 of array on page 2
```

ans = -0.1977 0.8252 -0.4686

## Wrapup

The most common place to use indexing is probably when a function returns an array with the independent variable in column 1 and solution in column 2, and you want to plot the solution. Second is when you want to analyze one part of the solution. There are also applications in numerical methods, for example in assigning values to the elements of a matrix or vector.

% categories: basic matlab % post_id = 916; %delete this line to force new post;