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
都为真时。但是当X
is时[]
,if
表现不同。这也有记录。