空のすべてのものが同じ答えを与えるはずです。しかし、ここでは彼らは別の答えを出しており、すべてと空のすべてが真です。誰でも matlabs のこの動作を説明できますか (バージョン 2010a->2012b でテスト済み)。
>>任意([])
ans =
0
しかし
>> すべて([])
ans =
1
空のすべてのものが同じ答えを与えるはずです。しかし、ここでは彼らは別の答えを出しており、すべてと空のすべてが真です。誰でも matlabs のこの動作を説明できますか (バージョン 2010a->2012b でテスト済み)。
>>任意([])
ans =
0
しかし
>> すべて([])
ans =
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 は true
には要素がないためA
、正しく返されますfalse
。
all(A)
「 のすべての要素についてA
、その要素が true である」、つまり
∀x∈A x は true
おそらくこれはあまり直感的ではありませんが、 には要素がないためA
、この文は真であり、MATLAB は正しく を返しますtrue
。一階論理の教科書は、これを確認します。
MATLAB の動作が実際に間違っているように見え、上記と矛盾する場合が必要な場合は、次を試してください。
>> if [] disp('hello'); else disp('bye'); end
bye
それ以外の場合if X
はtrue
すべて、 のすべての要素X
が true の場合です。しかし、X
がの場合[]
、if
動作が異なります。それも文書化されています。