L'idea di un indice lineare per gli array in MATLAB è importante. Un array in MATLAB è in realtà solo un vettore di elementi, in memoria. MATLAB consente di utilizzare un indice di riga e colonna o un singolo indice lineare. Ad 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 memorizzati nella memoria srotolando l'array in un vettore.
A(:)
ans =
8
3
4
1
5
9
6
7
2
Come si può vedere, l'ottavo elemento è il numero 7. In effetti, la funzione find restituisce i risultati come un indice lineare.
find(A>6)
ans =
1
6
8
Il risultato è, possiamo accedere a ciascun elemento a sua volta di un generale matrice n-d utilizzando un unico ciclo. Per esempio, se volessimo far quadrare gli elementi di A (sì, lo so che ci sono modi migliori per fare questo), 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 due (o più alti) indici dimensionali viene eseguita con le funzioni sub2ind e ind2sub.
L'indice lineare si applica in generale a qualsiasi matrice in MATLAB. Quindi puoi usarlo su strutture, array di celle, ecc. L'unico problema con l'indice lineare è quando diventano troppo grandi. MATLAB usa un intero a 32 bit per memorizzare questi indici. Quindi se l'array ha più di 2^32 elementi in totale, l'indice lineare fallirà. È davvero solo un problema se usi spesso matrici sparse, quando occasionalmente questo causerà un problema. (Anche se non uso una versione MATLAB a 64 bit, credo che il problema sia stato risolto per quelle persone fortunate che lo fanno.)
fonte
2009-04-17 03:13:00
Nota terminologica Matlab: Matlab ha un numero ridotto di tipi di dati principali. I più importanti sono: struct, matrix e cell array. Quando ci si riferisce a parti di una matrice, è comune usare il termine "elemento" e riservare il termine "cella" per riferirsi a parti di un array di celle. Le matrici e le matrici di celle presentano numerose differenze sintattiche e semantiche, anche se entrambe sono strutture di dati N-dimensionali. –
Notato e modificato. Grazie! – rlbond
Posso chiedere a cosa serve l'iterazione? Forse c'è un modo "vettorializzato" per farlo invece ... –