Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Indicizzazione di array

In MATLAB® sono disponibili tre approcci principali per accedere agli elementi di un array in base alla loro posizione (indice) nell'array. Questi approcci sono l'indicizzazione per posizione, l'indicizzazione lineare e l'indicizzazione logica.

Indicizzazione con le posizioni degli elementi

Il modo più comune è quello di specificare gli indici degli elementi in modo esplicito. Ad esempio, per accedere a un singolo elemento di una matrice, specificare il numero di riga seguito dal numero di colonna dell'elemento.

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A = 4×4

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

e = A(3,2)
e = 10

e è l'elemento nella posizione 3,2 (terza riga, seconda colonna) di A.

È inoltre possibile fare riferimento a più elementi alla volta, specificando i loro indici in un vettore. Ad esempio, accedere al primo e al terzo elemento della seconda riga di A.

r = A(2,[1 3])
r = 1×2

     5     7

Per accedere agli elementi di un intervallo di righe o di colonne, utilizzare il colon. Ad esempio, accedere agli elementi dalla prima alla terza riga e dalla seconda alla quarta colonna di A.

r = A(1:3,2:4)
r = 3×3

     2     3     4
     6     7     8
    10    11    12

Un modo alternativo per calcolare r è quello di utilizzare la parola chiave end per specificare dalla seconda colonna fino all'ultima. Questo approccio consente di specificare l'ultima colonna senza sapere esattamente quante colonne sono presenti in A.

r = A(1:3,2:end)
r = 3×3

     2     3     4
     6     7     8
    10    11    12

Se si desidera accedere a tutte le righe o le colonne, utilizzare l'operatore dei due punti da solo. Ad esempio, restituire tutta la terza colonna di A.

r = A(:,3)
r = 4×1

     3
     7
    11
    15

In linea generale, è possibile utilizzare l'indicizzazione per accedere agli elementi di un array in MATLAB, indipendentemente dal tipo di dati o dalle dimensioni. Ad esempio, accedere direttamente a una colonna di un array datetime.

t = [datetime(2018,1:5,1); datetime(2019,1:5,1)]
t = 2x5 datetime
   01-Jan-2018   01-Feb-2018   01-Mar-2018   01-Apr-2018   01-May-2018
   01-Jan-2019   01-Feb-2019   01-Mar-2019   01-Apr-2019   01-May-2019

march1 = t(:,3)
march1 = 2x1 datetime
   01-Mar-2018
   01-Mar-2019

Per array di dimensioni superiori, espandere la sintassi per adattarla alle dimensioni dell'array. Si consideri un array numerico casuale 3x3x3. Accedere all'elemento della seconda riga, della terza colonna e del primo foglio dell'array.

A = rand(3,3,3);
e = A(2,3,1)
e = 0.5469

Per maggiori informazioni sul lavoro con gli array multidimensionali, vedere Multidimensional Arrays.

Indicizzazione con un indice singolo

Un altro metodo per accedere agli elementi di un array è quello di utilizzare un solo indice, indipendentemente dalla grandezza o dalle dimensioni dell'array. Questo metodo è noto come indicizzazione lineare. Sebbene MATLAB visualizzi gli array in base alle loro grandezze e forme definite, in realtà vengono archiviati nella memoria come una singola colonna di elementi. Un modo efficace per visualizzare questo concetto è con una matrice. Sebbene il seguente array sia visualizzato come una matrice 3x3, MATLAB lo memorizza come una singola colonna composta dalle colonne di A aggiunte una dopo l'altra. Il vettore memorizzato contiene la sequenza degli elementi 12, 45, 33, 36, 29, 25, 91, 48, 11, che può essere visualizzata utilizzando un due punti singolo.

A = [12 36 91; 45 29 48; 33 25 11]
A = 3×3

    12    36    91
    45    29    48
    33    25    11

Alinear = A(:)
Alinear = 9×1

    12
    45
    33
    36
    29
    25
    91
    48
    11

Ad esempio, l'elemento 3,2 di A è 25 ed è possibile accedervi utilizzando la sintassi A(3,2). È inoltre possibile accedere a questo elemento utilizzando la sintassi A(6), poiché 25 è il sesto elemento della sequenza vettoriale memorizzata.

e = A(3,2)
e = 25
elinear = A(6)
elinear = 25

Sebbene l'indicizzazione lineare possa essere meno intuitiva dal punto di vista visivo, può essere molto efficace per eseguire alcuni calcoli che non dipendono dalla grandezza o dalla forma dell'array. Ad esempio, è possibile sommare facilmente tutti gli elementi di A senza dover fornire un secondo argomento alla funzione sum.

s = sum(A(:))
s = 330

Le funzioni sub2ind e ind2sub aiutano a convertire gli indici originali dell'array nella loro versione lineare. Ad esempio, calcolare l'indice lineare dell'elemento 3,2 di A.

linearidx = sub2ind(size(A),3,2)
linearidx = 6

Riconvertire l'indice lineare nella sua forma a righe e colonne.

[row,col] = ind2sub(size(A),6)
row = 3
col = 2

Indicizzazione con valori logici

L'utilizzo degli indicatori logici true e false è un altro modo utile per indicizzare gli array, in particolare quando si lavora con le dichiarazioni condizionali. Ad esempio, si supponga di voler sapere se gli elementi di una matrice A sono minori dei corrispondenti elementi di un'altra matrice B. L'operatore minore-di restituisce un array logico i cui elementi sono 1 quando un elemento in A è più piccolo del corrispondente elemento in B.

A = [1 2 6; 4 3 6]
A = 2×3

     1     2     6
     4     3     6

B = [0 3 7; 3 7 5]
B = 2×3

     0     3     7
     3     7     5

ind = A<B
ind = 2x3 logical array

   0   1   1
   0   1   0

Ora che si conosce la posizione degli elementi che soddisfano la condizione, è possibile esaminare i singoli valori utilizzando ind come array di indici. MATLAB abbina le posizioni del valore 1 in ind agli elementi corrispondenti di A e B ed elenca i loro valori in un vettore colonna.

Avals = A(ind)
Avals = 3×1

     2
     3
     6

Bvals = B(ind)
Bvals = 3×1

     3
     7
     7

Le funzioni "is" di MATLAB restituiscono inoltre array logici che indicano quali elementi di input soddisfano una determinata condizione. Ad esempio, verificare quali elementi di un vettore string, " " sono mancanti utilizzando la funzione ismissing.

str = ["A" "B" missing "D" "E" missing];
ind = ismissing(str)
ind = 1x6 logical array

   0   0   1   0   0   1

Si supponga di voler trovare i valori degli elementi che non sono mancanti. A tale scopo, utilizzare l'operatore ~ con il vettore indice ind.

strvals = str(~ind)
strvals = 1x4 string
    "A"    "B"    "D"    "E"

Per ulteriori esempi sull'utilizzo dell'indicizzazione logica, vedere Find Array Elements That Meet Conditions.

Argomenti complementari

Siti web esterni