Matlab OR | operator not working
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
bsriv
am 21 Feb. 2019
Kommentiert: Steven Lord
am 22 Feb. 2019
Hi I have a dataset (x.data) of 90,000 or so indices with values at each index. I am trying to pull the indices at certain values 21009 and 21003
When I sum(x.data==21009) I get 80, which is correct (ie, there are 80 indices with values of 21009). When I sum(x.data==21003) I get 150, also expected.
However when I try to pull both sum(x.data== 21009 | 21003) I get 90,000 and when I look at the output for x.data==21009 | 21003) it's just a column of 1s. It's probably something obvious but what am I missing?
1 Kommentar
Stephen23
am 22 Feb. 2019
Following the documented rules of operator precedence
the syntax that you invented
x.data== 21009 | 21003
is equivalent to
(x.data== 21009) | 21003
which, because the term in the parentheses can be either false or true, is therefore equivalent either of these:
(false) | 21003
(true) | 21003
which, because any non-zero values is considered to be true, are equivalent to these:
(false) | true
(true) | true
which (using standard rules of logic) is clearly always true.
Akzeptierte Antwort
Bob Thompson
am 21 Feb. 2019
To the best of my knowledge the or operator doesn't work quite like that. You need to set separate conditions on each side of the or, rather than multiple values to check for.
x.data == 21009 | x.data == 21003;
2 Kommentare
Steven Lord
am 22 Feb. 2019
If you later decide that you want to select elements that match any of a larger set of values (3, 4, or more) consider switching to ismember instead of chaining together 3, 4, or more expressions with the or operator | between them.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!