2012-10-18 4 views
9

Ero solo curioso di sapere perché Matlab può confrontare una matrice vuota con una matrice singleton. In particolarePerché Matlab può confrontare una matrice vuota con una matrice singleton?

>> [] == [1]

ans =

[]

Sembra proprio strano che sarebbe farlo e mi chiedo solo perché sarebbe farlo. Funziona anche per altre operazioni di confronto (< =, <,> =,>,! =). Dà un errore se la dimensione della riga o della colonna è maggiore di uno.

Grazie!

Edit: Credo anche lo fanno per altri operatori, come l'addizione, sottrazione, ecc

risposta

10

[] (matrice vuota) è considerato una rappresentazione di matrice valida della dimensione 0x0 da MATLAB. Dalla documentazione per la funzione eq, che è quello che viene chiamato quando si utilizza operatore == per confrontare matrici, il comportamento è come segue:

A == B confronta ciascun elemento dell'array A per uguaglianza con il corrispondente elemento dell'array B, e restituisce un array con elementi impostati logico 1 (true) dove A e B sono uguali, o logica 0 (false) dove non sono uguali. Ogni input dell'espressione può essere un array o un valore scalare.

...

Se un ingresso è scalare e l'altro una matrice nonscalar, l'ingresso scalare è trattata come se fosse un array avente le stesse dimensioni della matrice di input nonscalar.

Nel confronto [] == [1], l'operando di sinistra non è scalare (isscalar([]) rendimenti 0), mentre l'operando di destra è scalare. Pertanto si applicano regole di espansione scalari e l'operando scalare viene espanso alle dimensioni dell'operando non scalare (in questo caso 0x0) e il risultato è una matrice vuota.

+0

Ah-ha! Grazie! questo ha molto senso Mi sento sciocca che non ho visto che sarebbe stato uno scalare. Stiamo implementando un sottoinsieme di MATLAB nella nostra classe e siamo rimasti sconcertati sul perché Matlab lo avrebbe fatto. – user1348913

2

Dal documentation: Se uno degli operandi è uno scalare e l'altro una matrice, lo scalare espande a la dimensione della matrice.

Questo è un caso (un po 'strano) generale di "espansione" scalare per corrispondere alla dimensione della matrice con cui viene confrontato. Con gli scalari, la dimensione dell'altro array può essere qualsiasi cosa. Questo non è vero per confronti con array non scalari.

Problemi correlati