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;