Index satisfying multiple conditions
55 views (last 30 days)
Show older comments
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!
0 Comments
Accepted Answer
Guillaume
on 28 Mar 2018
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, :)
Wind_All = [year month day speed];
loc = ismember(Wind_All(:, 2), [1, 11, 12]);
filtered = Wind_All(loc, :)
More Answers (1)
Elias Gule
on 28 Mar 2018
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.
See Also
Categories
Find more on NaNs in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!