L'idea di un indice lineare per array in matlab è importante. Un array in MATLAB è in realtà solo un vettore di elementi, appeso in memoria. MATLAB ti consente di utilizzare un indice di riga e di colonna o un singolo indice lineare. Per esempio,
A = magic(3)
A =
8 1 6
3 5 7
4 9 2
A(2,3)
ans =
7
A(8)
ans =
7
Possiamo vedere l'ordine in cui gli elementi sono archiviati in memoria svolgendo l'array in un vettore.
A(:)
ans =
8
3
4
1
5
9
6
7
2
Come puoi vedere, l'ottavo elemento è il numero 7. Infatti, la funzione find restituisce i suoi risultati come un indice lineare.
find(A>6)
ans =
1
6
8
Il risultato è che possiamo accedere a ogni elemento a turno di un array nd generale utilizzando un singolo ciclo. Ad esempio, se volessimo quadrare gli elementi di A (sì, so che ci sono modi migliori per farlo), si potrebbe fare questo:
B = zeros(size(A));
for i = 1:numel(A)
B(i) = A(i).^2;
end
B
B =
64 1 36
9 25 49
16 81 4
Ci sono molte circostanze in cui l'indice lineare è più utile. La conversione tra l'indice lineare e gli indici bidimensionali (o superiori) viene eseguita con le funzioni sub2ind e ind2sub.
L'indice lineare si applica in generale a qualsiasi array in matlab. Quindi puoi usarlo su strutture, array di celle, ecc. L'unico problema con l'indice lineare è quando diventano troppo grandi. MATLAB utilizza un numero intero a 32 bit per memorizzare questi indici. Quindi, se il tuo array ha più di un totale di 2 ^ 32 elementi, l'indice lineare fallirà. In realtà è un problema solo se si utilizzano spesso matrici sparse, quando occasionalmente ciò causerà un problema. (Anche se non utilizzo una versione MATLAB a 64 bit, credo che il problema sia stato risolto per quei fortunati che lo fanno.)