Tal
Tal

Reputation: 1215

Retrieving specific elements in matlab from arrays in MATLAB

I have an array in MATLAB

For example

a = 1:100;

I want to select the first 4 element in every successive 10 elements.

In this example I want to b will be

b = [1,2,3,4,11,12,13,14, ...]

can I do it without for loop?

I read in the internet that i can select the element for each step:

b = a(1:10:end);

but this is not working for me.

Can you help me?

Upvotes: 1

Views: 187

Answers (2)

Santhan Salai
Santhan Salai

Reputation: 3898

With reshape

%// reshaping your matrix to nx10 so that it has successive 10 elements in each row
temp =  reshape(a,10,[]).';    %//'

%// taking first 4 columns and reshaping them back to a row vector
b = reshape(temp(:,1:4).',1,[]);    %//'

Sample Run for smaller size (although this works for your actual dimensions)

a = 1:20;

>> b

b =

 1     2     3     4    11    12    13    14

Upvotes: 1

Raab70
Raab70

Reputation: 721

To vectorize the operation you must generate the indices you wish to extract:

a = 1:100;
b = a(reshape(bsxfun(@plus,(1:4)',0:10:length(a)-1),[],1));

Let's break down how this works. First, the bsxfun function. This performs a function, here it is addition (@plus) on each element of a vector. Since you want elements 1:4 we make this one dimension and the other dimension increases by tens. this will lead a Nx4 matrix where N is the number of groups of 4 we wish to extract.

The reshape function simply vectorizes this matrix so that we can use it to index the vector a. To better understand this line, try taking a look at the output of each function.

Sample Output:

>> b = a(reshape(bsxfun(@plus,(1:4)',0:10:length(a)-1),[],1)) 

b =
Columns 1 through 19
 1     2     3     4    11    12    13    14    21    22    23    24    31    32    33    34    41    42    43
Columns 20 through 38
44    51    52    53    54    61    62    63    64    71    72    73    74    81    82    83    84    91    92
Columns 39 through 40
93    94

Upvotes: 0

Related Questions