2012-10-18 12 views
9

Matlabが空の行列とシングルトンの行列を比較できるのはなぜか不思議でした。特定のMatlabはなぜ空行列をシングルトン行列と比較できますか?

>> [] == [1]

ans =

[]

ではそれはそれを行うだろうと奇妙に思えるし、それはそれを行うだろう、なぜ私は思ったんだけど。これは他の比較演算(< =、<、> =、>、!=)でも有効です。行または列のサイズが1より大きい場合、エラーが発生します。

ありがとうございます!

編集:私はまた、彼らはdocumentationからなど

答えて

10

[](空行列)は、MATLABによるサイズ0x0の有効な行列表現と見なされます。次のように行列を比較するために、オペレータ==を使用するときに呼び出されるものですeq機能、のドキュメントから、動作は次のとおりです。

A == Bは、アレイの 対応する要素と等しい配列Aの各要素を比較しますB、及び要素を持つアレイ 論理1に設定(trueABは、それらが等しくない (false0等しい、または論理である返します。式の各入力は、配列 またはスカラー値の配列にすることができます。

...

一方の入力がスカラーであり、それは非スカラー入力配列と同じ 寸法を有する配列であるかのように、他の非スカラー配列は、次いで スカラー入力が処理される場合。比較[] == [1]

右オペランドがスカラーであるが、左のオペランドは、非スカラー(isscalar([])戻り0)です。したがって、スカラー拡張規則が適用され、スカラー・オペランドは非スカラー・オペランド(この場合は0x0)の次元に展開され、結果は空の行列になります。

+0

Ah-ha!ありがとう!それはたくさんの意味があります。私はそれがスカラーであるとは思わなかった。私たちは、私たちのクラスにmatlabのサブセットを実装しています。なぜMatlabがそうするのか、私たちは困惑していました。 – user1348913

2

加算、減算、など、他の事業者、のためにこれを行うと信じて:オペランドのどちらかがスカラや他の行列である場合には、スカラーに展開行列のサイズ

これは、比較対象の行列のサイズと一致するようにスカラーの "展開"の(少し奇妙な)一般的なケースです。スカラーでは、他の配列のサイズは何でもかまいません。非スカラー配列の比較ではそうではありません。

関連する問題