Index satisfying multiple conditions

조회 수: 113(최근 30일)
NMans
NMans 2018년 3월 28일
댓글: NMans 2018년 3월 28일
Hi, I have a matrix with 4 columns of Year, Month, Hour, Speed. I would like to extract the data from just month 1, month 11 and month 12. My code is as below:
Wind_All = [year month day speed];
loc = find(Wind_All(:,2)==1 & Wind_All(:,2)>=11);
YEAR = [year(loc(1):max(loc))];
MONTH = [month(loc(1):max(loc))];
DAY = [day(loc(1):max(loc))];
SPEED = [speed(loc(1):max(loc))];
However, it's giving me an error message:
Index exceeds matrix dimensions. Error in Speed_Bin6 (line 34); YEAR = [year(loc(1):max(loc))];
Can someone tell me what I did wrong there? It works if it's:
loc = find(Wind_All(:,1)==2015 & Wind_All(:,2)>=11); &&indexing year 2015 and month 11 and 12.
Thank you!

채택된 답변

Guillaume
Guillaume 2018년 3월 28일
I do not really understand what you are trying to do with the loc(1):max(loc) bit.
As Elias says, you want | instead of &. But note that you also did not need the find:
Wind_All = [year month day speed];
loc = Wind_All(:, 2) == 1 | Wind_All(:, 2) >= 11; %No need for find. Use logical indexing instead
filtered = Wind_All(loc, :)
And personally, I would use ismember instead of your logical expression:
Wind_All = [year month day speed];
loc = ismember(Wind_All(:, 2), [1, 11, 12]);
filtered = Wind_All(loc, :)
  댓글 수: 1
NMans
NMans 2018년 3월 28일
Thanks these also work!!

댓글을 달려면 로그인하십시오.

추가 답변(1개)

Elias Gule
Elias Gule 2018년 3월 28일
Just replace the '&' with '|'. Because you want the value in column 2 where the month is 1 or where the month is greater or equal to 11.
  댓글 수: 1
NMans
NMans 2018년 3월 28일
thanks this works!

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by