Main Content

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 a Condition.

Argomenti complementari

Siti web esterni