I have an array of angles and I need to identify periods where this array is above or below certain thresholds
3 views (last 30 days)
Show older comments
Array of angles ranges from 0 - 360. I need to know the indices of values below 15, between 165 and 195, and above 345. Attempted using:
array_logical = array < 15 && 165 < array < 195 && 345 < array;
array_logical = array < 15 || 165 < array < 195 || 345 < array;
What is the best way to apply these three conditions in one logical array?
0 Comments
Accepted Answer
dpb
on 10 Apr 2014
ix= (x<15 | iswithin(x,166,194) | x>345;
where used the "syntactic sugar" of help function for the compound condition to make the upper level expression simpler to read. NB: since my function is inclusive changed the limits to match
function flg=iswithin(x,lo,hi)
% returns T for values within range of input
% SYNTAX:
% [log] = iswithin(x,lo,hi)
% returns T for x between lo and hi values, inclusive
flg= (x>=lo) & (x<=hi);
Your problem above is primarily using the short-circuiting operators instead of the element-wise ones (the "double operator" form instead of single).
"These operations are explained in the MATLAB Programming documentation on logical operators, under the topic of Basic Program Components."
2 Comments
dpb
on 10 Apr 2014
Good to hear...I see I left an extraneous '(' around--was going to wrap terms but decided it didn't need it and didn't clean 'em all up...
More Answers (1)
Mischa Kim
on 10 Apr 2014
Edited: Mischa Kim
on 10 Apr 2014
Use
array_ind = find(array<15 | (array>=165 & array<=195) | array>345)
2 Comments
See Also
Categories
Find more on Characters and Strings 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!