Any and all on a empty 应该给出相同的答案。然而在这里他们给出了不同的答案,所有的和空的都是真的。谁能解释 matlabs 的这种行为(在 2010a->2012b 版本上测试)。
>> 任何([])
答案=
0
但
>> 所有([])
答案=
1
Any and all on a empty 应该给出相同的答案。然而在这里他们给出了不同的答案,所有的和空的都是真的。谁能解释 matlabs 的这种行为(在 2010a->2012b 版本上测试)。
>> 任何([])
答案=
0
但
>> 所有([])
答案=
1
此行为已明确记录:
来自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)
any并且all在空数组上绝对不应该给出相同的答案 - MATLAB 的行为既记录在案又是正确的。
any(A)意思是“存在一个A真实的元素”,换句话说
∃x∈A x 为真
由于 中没有元素A,因此它正确返回false。
all(A)意思是“对于 中的所有元素A,该元素为真”,换句话说
∀x∈A x 为真
也许这不太直观,但由于 中没有元素A,因此该句子为真 - 并且 MATLAB 正确返回true。任何关于一阶逻辑的教科书都会证实这一点。
如果您想要 MATLAB 的行为确实看起来确实错误并且与上述情况相矛盾的情况,请尝试
>> if [] disp('hello'); else disp('bye'); end
bye
在所有其他情况下,if X当true的所有元素X都为真时。但是当Xis时[],if表现不同。这也有记录。