Die Idee eines linearen Index für Arrays in Matlab ist wichtig. Ein Array in MATLAB ist eigentlich nur ein Vektor von Elementen, die im Speicher aufgereiht sind. Mit MATLAB können Sie entweder einen Zeilen- und Spaltenindex oder einen einzelnen linearen Index verwenden. Beispielsweise,
A = magic(3)
A =
8 1 6
3 5 7
4 9 2
A(2,3)
ans =
7
A(8)
ans =
7
Wir können die Reihenfolge sehen, in der die Elemente im Speicher gespeichert sind, indem wir das Array in einen Vektor abrollen.
A(:)
ans =
8
3
4
1
5
9
6
7
2
Wie Sie sehen können, ist das 8. Element die Zahl 7. Tatsächlich gibt die Funktion find ihre Ergebnisse als linearen Index zurück.
find(A>6)
ans =
1
6
8
Das Ergebnis ist, dass wir nacheinander auf jedes Element eines allgemeinen nd-Arrays mit einer einzigen Schleife zugreifen können. Wenn wir zum Beispiel die Elemente von A quadrieren wollten (ja, ich weiß, dass es bessere Möglichkeiten gibt, dies zu tun), könnte man dies tun:
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
Es gibt viele Umstände, unter denen der lineare Index nützlicher ist. Die Konvertierung zwischen dem linearen Index und zwei (oder höheren) dimensionalen Indizes erfolgt mit den Funktionen sub2ind und ind2sub.
Der lineare Index gilt im Allgemeinen für jedes Array in Matlab. Sie können es also für Strukturen, Zellenarrays usw. verwenden. Das einzige Problem mit dem linearen Index besteht darin, dass sie zu groß werden. MATLAB verwendet eine 32-Bit-Ganzzahl zum Speichern dieser Indizes. Wenn Ihr Array also mehr als 2 ^ 32 Elemente enthält, schlägt der lineare Index fehl. Es ist wirklich nur ein Problem, wenn Sie häufig spärliche Matrizen verwenden, wenn dies gelegentlich zu einem Problem führt. (Obwohl ich keine 64-Bit-MATLAB-Version verwende, glaube ich, dass das Problem für die glücklichen Menschen, die dies tun, gelöst wurde.)