Matlab'deki diziler için doğrusal indeks fikri önemli bir fikirdir. MATLAB'daki bir dizi gerçekten belleğe dizilmiş bir eleman vektörüdür. MATLAB, bir satır ve sütun dizini veya tek bir doğrusal dizin kullanmanıza izin verir. Örneğin,
A = magic(3)
A =
8 1 6
3 5 7
4 9 2
A(2,3)
ans =
7
A(8)
ans =
7
Diziyi bir vektöre açarak elemanların bellekte saklanma sırasını görebiliriz.
A(:)
ans =
8
3
4
1
5
9
6
7
2
Gördüğünüz gibi, 8. eleman 7 sayısıdır. Aslında, find işlevi sonuçlarını doğrusal bir dizin olarak döndürür.
find(A>6)
ans =
1
6
8
Sonuç olarak, her bir elemana tek bir döngü kullanarak genel bir nd dizisi ile erişebiliriz. Örneğin, A'nın öğelerini karelemek istersek (evet, bunu yapmanın daha iyi yolları olduğunu biliyorum), bunu yapabiliriz:
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
Doğrusal indeksin daha kullanışlı olduğu birçok durum vardır. Doğrusal indeks ile iki (veya daha yüksek) boyutlu alt simge arasındaki dönüşüm, alt2ind ve ind2sub fonksiyonları ile gerçekleştirilir.
Doğrusal indeks genel olarak matlab'deki herhangi bir dizi için geçerlidir. Yani bunu yapılar, hücre dizileri vb. Üzerinde kullanabilirsiniz. Doğrusal indeksle ilgili tek sorun, çok büyüdükleri zamandır. MATLAB, bu dizinleri saklamak için 32 bitlik bir tamsayı kullanır. Dolayısıyla, dizinizde toplam 2 ^ 32'den fazla öğe varsa, doğrusal dizin başarısız olur. Seyrek matrisleri sık sık kullanırsanız bu gerçekten sadece bir sorundur, bazen bu bir soruna neden olur. (64 bit MATLAB sürümü kullanmasam da, bu sorunun, kullanan şanslı kişiler için çözüldüğüne inanıyorum.)