views:

312

answers:

2

I have a matrix in MATLAB from which I want to sample every other entry:

a =

     1     5     9    13
     2     6    10    14
     3     7    11    15
     4     8    12    16

And I want:

result =

     1     9    
     3    11

How can I do this without a for loop?

+4  A: 

This should work for your specific example:

result = a([1 3],[1 3]);

and more generally:

result = a(1:2:size(a,1),1:2:size(a,2));

For more details about indexing in MATLAB, you can check out the documentation here.

gnovice
+5  A: 

I don't know of a multi-dimensional way to do it automatically, but Matlab's indexing is good enough if you're happy to specify it for each dimension:

a(1:2:end,1:2:end)
Will Robertson
+1: Somehow I forgot to include the `end` syntax in my answer. Good catch. ;)
gnovice

related questions