2012-10-18 15 views
9

Byłem po prostu ciekawy, dlaczego Matlab może porównać pustą matrycę z matrycą singleton. W szczególnościDlaczego Matlab może porównywać pustą macierz z macierzą singleton?

>> [] == [1]

ans =

[]

prostu wydaje się dziwne, że byłoby to zrobić i jestem po prostu zastanawiasz się, dlaczego to zrobić. Działa to również w przypadku innych operacji porównania (< =, <,> =,>,! =). Daje błąd, jeśli rozmiar wiersza lub kolumny jest większy niż jeden.

Dzięki!

Edit: Wierzę również, robią to dla innych operatorów, takich jak dodawanie, odejmowanie itp

Odpowiedz

10

[] (pusta matryca) jest uważana za prawidłową reprezentację matrycy o rozmiarze 0x0 autorstwa MATLAB. Z dokumentacji funkcji eq, czyli co jest wywoływana przy użyciu operatora == porównać matryce, zachowanie jest w następujący sposób:

A == B porównuje każdy element tablicy A równości z odpowiedniego elementu tablicy B i zwraca tablicę elementów ustawione na logiczne 1 (true), gdzie A i B są równe lub logicznego 0 (false) gdy nie są równe. Każde wejście wyrażenia może być tablicą lub wartością skalarną.

...

Jeśli jedno wejście jest skalarem, a drugi nonscalar tablicy, a następnie wejście skalarne jest traktowany tak, jakby był tablica ma takie same wymiary jak nonscalar matrycy wejściowej.

W porównaniu [] == [1], lewy argument nie jest skalarne (isscalar([]) powraca 0), podczas gdy prawy operand jest skalarne. Obowiązują więc reguły skalarne, a operand skalarny jest rozszerzany do wymiarów argumentu nieskalarnego (w tym przypadku 0x0), a wynikiem jest pusta macierz.

+0

Ah-ha! Dzięki! to ma wiele sensu. Czuję się głupio, nie widziałem, że to będzie skalar. W naszej klasie wdrażamy podzbiór matlab i byliśmy zaskoczeni, dlaczego Matlab to zrobi. – user1348913

2

od documentation: Jeśli jeden z operandów jest skalarne, a druga macierz, skalar rozszerza się rozmiar matrycy.

Jest to (nieco dziwny) ogólny przypadek skalarnego "rozszerzania" w celu dopasowania do rozmiaru macierzy, z którą jest porównywany. W przypadku skalarów rozmiar innej tablicy może być dowolny. To nie jest prawdą w przypadku nieskalarnych porównań tablic.

Powiązane problemy