4

Any and all on a empty 应该给出相同的答案。然而在这里他们给出了不同的答案,所有的和空的都是真的。谁能解释 matlabs 的这种行为(在 2010a->2012b 版本上测试)。

>> 任何([])

答案=

 0

>> 所有([])

答案=

 1
4

2 回答 2

5

此行为已明确记录:

我想 的行为all有点违反直觉。猜测一下,我会说目的是为了保持以下等价性,以实现对称性:

~all(A) == any(~A)
于 2013-03-06T20:28:33.223 回答
2

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 Xtrue的所有元素X都为真时。但是当Xis时[]if表现不同。这也有记录。

于 2013-03-07T10:13:10.497 回答