2012-10-18 3 views
9

Ich war nur neugierig, warum Matlab eine leere Matrix mit einer Singleton-Matrix vergleichen kann. InsbesondereWarum kann Matlab eine leere Matrix mit einer Singleton-Matrix vergleichen?

>> [] == [1]

ans =

[]

Es scheint nur seltsam, dass es das tun würde, und ich frage mich nur, warum es das tun würde. Dies funktioniert auch bei anderen Vergleichsoperationen (< =, <,> =,>,! =). Es tritt ein Fehler auf, wenn die Größe der Zeile oder Spalte größer als eins ist.

Danke!

Edit: Ich glaube, sie tun dies auch für andere Betreiber, wie Addition, Subtraktion usw.

Antwort

10

[] (leere Matrix) wird von MATLAB als gültige Matrixdarstellung der Größe 0x0 betrachtet. Aus der Dokumentation für die eq Funktion, das ist, was, wenn Sie Operator aufgerufen wird == Matrizen zu vergleichen, ist das Verhalten wie folgt:

A == B jedes Element des Arrays A für die Gleichstellung mit dem entsprechenden Elemente des Arrays vergleicht B, und gibt ein Array mit Elementen auf logisch 1 (true) wobei A und B gleich sind, oder logische 0 (false) wo sie nicht gleich sind. Jede Eingabe des Ausdrucks kann ein Array oder ein Skalarwert sein.

...

Wenn eine skalare Eingabe und der andere ein Skalarwert Array ist, dann ist die skalaren Eingangs behandelt wird, als ob es eine Reihe waren die gleichen Abmessungen wie die Skalarwert Eingangsarray.

Im Vergleich [] == [1], der linke Operand nicht-skalare (isscalar([]) kehrt 0), während der rechte Operand Skalar ist. Es gelten also skalare Erweiterungsregeln, und der Skalaroperand wird auf die Dimensionen des nicht-skalaren Operanden (in diesem Fall 0x0) erweitert, und das Ergebnis ist eine leere Matrix.

+0

Ah-ha! Vielen Dank! das macht sehr viel Sinn. Ich fühle mich albern, ich habe nicht gesehen, dass es ein Skalar wäre. Wir implementieren eine Untermenge von Matlab in unserer Klasse und wir waren verblüfft, warum Matlab das tun würde. – user1348913

2

Von der documentation: Wenn einer der Operanden ein Skalar ist und die andere eine Matrix, dehnt sich der Skalar die Größe der Matrix.

Dies ist ein (etwas seltsamer) allgemeiner Fall, in dem der Skalar "expandiert", um die Größe der Matrix zu vergleichen, mit der er verglichen wird. Bei Skalaren kann die Größe des anderen Arrays beliebig sein. Dies gilt nicht für nicht skalare Array-Vergleiche.

Verwandte Themen