## Extracting sections of data from a Matrix with Indexing

### Jenny (view profile)

on 26 Sep 2013
Latest activity Commented on by Jenny

on 30 Sep 2013

### Image Analyst (view profile)

I have a 84761 x 8 matrix (see attached file as an example of data from the matrix).

I would like to extract all of the rows of data where the month (3rd column) = 11, 12, 1, 2 and 3.

I have set the 'months' to look for in an array called WinterMonths.

I am trying to loop through the matrix (EditedWindTempMatrix) and write all of the data where the month = a 'winter' month to a new matrix.

The 'for loop' loops through the 5 'winter' months.

My problem lies in coding the if loop. i.e. extract the data and write it to a new matrix if the condition is true.

How do I index the new matrix (called WinterWTMatrix) to write the data from the matrix with all the data (EditedWindTempMatrix) to the new matrix only when the condition specified is true?

```WinterMonths = [11 12 1 2 3]; % 1 x 5 array
```
```for k = 1:length(WinterMonths);
MonthIdx=WinterMonths(k);
if EditedWindTempMatrix(:,3)==MonthIdx;
WinterWTMatrix=EditedWindTempMatrixdata;
```
```      end
end```

I know that I am not correctly extracting the data from the EditedWindTempMatrix and not correctly writing it to the WinterWTMatrix but I am not sure how to do this.

(I can do it column by column but wanted a more efficient way to extract the desired data).

### Image Analyst (view profile)

on 26 Sep 2013
Edited by Image Analyst

### Image Analyst (view profile)

on 26 Sep 2013

Jenny:

Use ismember:

```% Create sample data:
%EditedWindTempMatrix = randi(12, 10,3)
% Define which months are winter.
WinterMonths = [11 12 1 2 3]; % 1 x 5 array
```
```% Find out which rows are winter.
rowsToExtract = ismember(EditedWindTempMatrix(:, 3), WinterMonths)
% Get those rows from the original matrix
WinterData = EditedWindTempMatrix(rowsToExtract,:)
```

Jenny

### Jenny (view profile)

on 30 Sep 2013

Thank you for this. It makes it look easy. Jenny

on 26 Sep 2013
Edited by Simon

### Simon (view profile)

on 26 Sep 2013

Hi!

Search the third column for your desired month

```irows = (EditedWindTempMatrix(:,3) == 11) | ...
(EditedWindTempMatrix(:,3) == 12) | ...
(EditedWindTempMatrix(:,3) == 1) | ...
(EditedWindTempMatrix(:,3) == 2) | ...
(EditedWindTempMatrix(:,3) == 3);
```

Then "irows" is a logical array of length of size(1) of EditedWindTempMatrix. Then

```WinterWTMatrix = EditedWindTempMatrix(irows, :);
```

Image Analyst

### Image Analyst (view profile)

on 26 Sep 2013

I think you want OR | instead of AND |.

Simon

### Simon (view profile)

on 26 Sep 2013

Yes, 'or' ('|') instead of 'and' ('&'). You're right. I corrected it above.

Your solution looks better than mine. But I experience with "ismember" a slower execution, especially if I use it with full 2d arrays and not with just a column like in this example. But that's another problem.

Jenny

### Jenny (view profile)

on 30 Sep 2013

Thank you for your help. Jenny