Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Extracting sections of data from a Matrix with Indexing

Asked by Jenny on 26 Sep 2013
Latest activity Commented on by Jenny on 30 Sep 2013

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).

0 Comments

Jenny

Products

No products are associated with this question.

2 Answers

Answer by Image Analyst on 26 Sep 2013
Edited by Image Analyst on 26 Sep 2013
Accepted answer

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,:)

1 Comment

Jenny on 30 Sep 2013

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

Image Analyst
Answer by Simon on 26 Sep 2013
Edited by Simon 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, :);

3 Comments

Image Analyst on 26 Sep 2013

I think you want OR | instead of AND |.

Simon 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 on 30 Sep 2013

Thank you for your help. Jenny

Simon

Contact us