Using AND Operator in “if” statements
2,412 次查看(过去 30 天)
显示 更早的评论
Hi, When I type the following code: if size([1 2 3])==size([4 5 6]) & size([4 5 6])==size([7 8 9]) 'yes' else 'no' end MATLAB Code Analyzer issues this warning message: "When both arguments are numeric scalars, consider replacing & with && for performance." So, I use && instead of &: if size([1 2 3])==size([4 5 6]) && size([4 5 6])==size([7 8 9]) 'yes' else 'no' end But when I run the updated script, MATLAB displays an error message in the Command Window: ??? Operands to the || and && operators must be convertible to logical scalar values. What can I do to fix this? Thanks in advance. Andrew DeYoung Carnegie Mellon University
7 个评论
Matt Tearle
2011-5-11
You're right about IF and vectors, but the Code Analyzer doesn't necessarily know which variables are vectors and which aren't. The & operator is one instance where it can give a message without having to determine that. The str2num vs str2double message is another example. It's vaguely annoying to get a warning, but the Analyzer's just hedging its bets.
[BTW, I'm just passing on the "official" answer here. I was about to submit a request saying, basically, exactly what you've said. But I found an existing discussion, and I've paraphrased the end decision. I'm sure there's more to it than I can skim and pass along.]
Jenny
2016-8-2
Matt, I still use my notes from your class, and thanks for the help in this question. I needed to get this right.
采纳的回答
Andrew Newell
about 14 hours 前
编辑:MathWorks Support Team
about 7 hours 前
The problem is that size returns a vector: size([1 2 3]) ans = 1 3 Instead, use |numel|: if numel([1 2 3])==numel([4 5 6]) && numel([4 5 6])==numel([7 8 9]) disp('yes') else disp('no') end Or you could use |all(size([1 2 3])==size([4 5 6])| etc. I have also put in the |disp| commands to take care of the other warnings.
更多回答(1 个)
Sean de Wolski
2011-5-10
As an addendum to Andrew's thorough and good solution, you can check the sizes directly:
if(isequal(size([1 2 3]),size([4 5 6])))
disp('yes')
else
disp('no')
end
This will fail if the sizes are not the same but the number of elements (numel) is:
if(isequal(size([1 2 3]),size([4; 5; 6])))
disp('yes')
else
disp('no')
end
3 个评论
Matt Tearle
2011-5-10
Another benefit to isequal is that it won't throw an error message in situations where == will (it will just return false). For example
if size(rand(2))==size(rand(3,2,2))
disp('yes')
else
disp('no')
end
will fail because size will return a 3-element vector for a 3-D array. However
if isequal(size(rand(2)),size(rand(3,2,2)))
disp('yes')
else
disp('no')
end
works fine.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!