空的任何一切都应该给出相同的答案。然而,在这里,他们给出了一个不同的答案,所有和空的都是真的。任何人都可以解释matlabs的这种行为(在版本2010-> 2012b上测试)。
>>任何([])
ans =
0
但是
>>所有([])
ans =
1
答案 0 :(得分:5)
此行为已明确记录:
来自http://www.mathworks.co.uk/help/matlab/ref/any.html:
如果
A
为空,则any(A)
会返回逻辑0
(false
)。
来自http://www.mathworks.co.uk/help/matlab/ref/all.html:
如果
A
为空,则all(A)
会返回逻辑1
(true
)。
我认为all
的行为有点违反直觉。在猜测中,我会说对于对称性,意图是保持以下等价:
~all(A) == any(~A)
答案 1 :(得分:2)
any
和all
绝对不能给出相同的答案 - MATLAB的行为既有记录也有正确。
any(A)
表示“存在A
的元素是真的”,换句话说
∃x∈A x is true
由于A
中没有元素,因此它会正确返回false
。
all(A)
表示“对于A
中的所有元素,该元素为真”,换句话说
∀x∈A x is true
也许这不太直观,但由于A
中没有元素,该句子为真 - 并且MATLAB正确返回true
。任何关于一阶逻辑的教科书都会证实这一点。
如果您想要一个MATLAB行为确实出现错误并与上述内容相矛盾的情况,请尝试
>> if [] disp('hello'); else disp('bye'); end
bye
在所有其他情况下,当if X
的所有元素都为真时,true
为X
。但是当X
为[]
时,if
的行为会有所不同。这也是记录在案的。