Matlabが空行列をシングルトン行列と比較できる理由に興味がありました。特に
>> [] == [1]
ans =
[]
それがそれをするのは奇妙に思えます、そして私はそれがなぜそれをするのか疑問に思っています。これは、他の比較操作(<=、<、> =、>、!=)でも機能します。行または列のサイズが1より大きい場合、エラーが発生します。
ありがとう!
編集:私はまた、彼らが足し算、引き算などの他の演算子のためにこれを行うと信じています。
Matlabが空行列をシングルトン行列と比較できる理由に興味がありました。特に
>> [] == [1]
ans =
[]
それがそれをするのは奇妙に思えます、そして私はそれがなぜそれをするのか疑問に思っています。これは、他の比較操作(<=、<、> =、>、!=)でも機能します。行または列のサイズが1より大きい場合、エラーが発生します。
ありがとう!
編集:私はまた、彼らが足し算、引き算などの他の演算子のためにこれを行うと信じています。
[]
(空行列) は0x0
、MATLAB によるサイズの有効な行列表現と見なされます。演算子を使用して行列を比較するeq
ときに呼び出される関数のドキュメントから、動作は次のようになります。==
A == B
A
array の各要素が対応するarray の要素と等しいかどうかを比較し、要素が logical ( ) (とが等しい場合)、または logical ( ) (等しくない場合) にB
設定された配列を返します。式の各入力は、配列またはスカラー値にすることができます。1
true
A
B
0
false
...
一方の入力がスカラーで、もう一方が非スカラー配列の場合、スカラー入力は、非スカラー入力配列と同じ次元を持つ配列であるかのように扱われます。
比較[] == [1]
では、左側のオペランドは非スカラー (isscalar([])
戻り値0
) ですが、右側のオペランドはスカラーです。そのため、スカラー拡張規則が適用され、スカラー オペランドは非スカラー オペランド (この場合は0x0
) の次元に拡張され、結果は空の行列になります。
ドキュメントから: オペランドの 1 つがスカラーで、もう 1 つが行列の場合、スカラーは行列のサイズに拡張されます。
これは、比較対象の行列のサイズに合わせてスカラーを「拡張」する (少し変わった) 一般的なケースです。スカラーでは、他の配列のサイズは何でもかまいません。これは、非スカラー配列の比較には当てはまりません。