Question

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?

Was it helpful?

Solution

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)

OTHER TIPS

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.

I found this today. A is the original matrix, sampled every s element.

Adown=downsample(downsample(A,s)',s)'

It down-samples the matrix vertically, transposes, then samples the orthogonal direction, then transposes back.

samples_x = floor(linspace(1, size(a,1), new_Nx));
samples_y = floor(linspace(1, size(a,2), new_Ny));
new_a = a(samples_x,samples_y)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top