MATLAB Language Matrici cellulari


Esempio

Elementi della stessa classe possono spesso essere concatenati in array (con alcune rare eccezioni, ad esempio i manici di funzione). Gli scalari numerici, per impostazione predefinita del double della classe, possono essere memorizzati in una matrice.

>> A = [1, -2, 3.14, 4/5, 5^6; pi, inf, 7/0, nan, log(0)]
A =
   1.0e+04 *
    0.0001   -0.0002    0.0003    0.0001    1.5625
    0.0003       Inf       Inf       NaN      -Inf

I caratteri, che sono di classe char in MATLAB, possono anche essere archiviati in array usando una sintassi simile. Tale array è simile a una stringa in molti altri linguaggi di programmazione.

>> s = ['MATLAB ','is ','fun']
s =
MATLAB is fun

Si noti che nonostante entrambi utilizzino le parentesi [ e ] , le classi di risultati sono diverse. Pertanto le operazioni che possono essere eseguite su di loro sono anche diverse.

>> whos
  Name      Size            Bytes  Class     Attributes

  A         2x5                80  double              
  s         1x13               26  char                

In effetti, l'array s non è un array di 'MATLAB ' , 'is ' e 'fun' delle stringhe, è solo una stringa - una matrice di 13 caratteri. Otterresti gli stessi risultati se fosse definito da uno dei seguenti:

>> s = ['MAT','LAB ','is f','u','n'];
>> s = ['M','A','T','L','A','B,' ','i','s',' ','f','u','n'];

Un vettore MATLAB regolare non consente di memorizzare un mix di variabili di classi diverse o alcune stringhe diverse. Questo è dove l'array di cell è utile. Questa è una matrice di celle che ciascuna può contenere alcuni oggetti MATLAB, la cui classe può essere diversa in ogni cella, se necessario. Usa le parentesi graffe { e } intorno agli elementi per archiviarli in un array di celle.

>> C = {A; s}
C = 
    [2x5 double]
    'MATLAB is fun'
>> whos C
  Name      Size            Bytes  Class    Attributes

  C         2x1               330  cell 

Gli oggetti MATLAB standard di qualsiasi classe possono essere memorizzati insieme in un array di celle. Nota che gli array di celle richiedono più memoria per archiviare il loro contenuto.

L'accesso ai contenuti di una cella viene eseguito utilizzando parentesi graffe { e } .

>> C{1}
ans =
   1.0e+04 *
    0.0001   -0.0002    0.0003    0.0001    1.5625
    0.0003       Inf       Inf       NaN      -Inf

Si noti che C(1) è diverso da C{1} . Mentre il secondo restituisce il contenuto della cella (e ha un esempio di classe double in out), il primo restituisce un array di celle che è un sottoarray di C Allo stesso modo, se D fosse un array di 10 per 5 celle, D(4:8,1:3) restituirebbe un sub-array di D cui dimensione è 5 per 3 e la cui classe è cell . E la sintassi C{1:2} non ha un singolo oggetto restituito, ma rater restituisce 2 oggetti diversi (simile a una funzione MATLAB con più valori di ritorno):

>> [x,y] = C{1:2}
x =
                         1                        -2                      3.14                       0.8                     15625
          3.14159265358979                       Inf                       Inf                       NaN                      -Inf
y =
MATLAB is fun