Ý tưởng về một chỉ số tuyến tính cho các mảng trong matlab là một ý tưởng quan trọng. Một mảng trong MATLAB thực sự chỉ là một vector gồm các phần tử, được xâu chuỗi trong bộ nhớ. MATLAB cho phép bạn sử dụng chỉ mục hàng và cột hoặc chỉ mục tuyến tính duy nhất. Ví dụ,
A = magic(3)
A =
8 1 6
3 5 7
4 9 2
A(2,3)
ans =
7
A(8)
ans =
7
Chúng ta có thể thấy thứ tự các phần tử được lưu trong bộ nhớ bằng cách cuộn mảng thành một vector.
A(:)
ans =
8
3
4
1
5
9
6
7
2
Như bạn có thể thấy, phần tử thứ 8 là số 7. Trên thực tế, hàm find trả về kết quả của nó dưới dạng một chỉ số tuyến tính.
find(A>6)
ans =
1
6
8
Kết quả là chúng ta có thể truy cập lần lượt từng phần tử của mảng thứ n tổng quát bằng một vòng lặp đơn. Ví dụ: nếu chúng ta muốn bình phương các phần tử của A (vâng, tôi biết có nhiều cách tốt hơn để làm điều này), người ta có thể làm điều này:
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
Có nhiều trường hợp mà chỉ số tuyến tính hữu ích hơn. Việc chuyển đổi giữa chỉ số tuyến tính và hai (hoặc cao hơn) chỉ số con chiều được thực hiện với các hàm sub2ind và ind2sub.
Chỉ số tuyến tính áp dụng chung cho bất kỳ mảng nào trong matlab. Vì vậy, bạn có thể sử dụng nó trên các cấu trúc, mảng ô, v.v. Vấn đề duy nhất với chỉ mục tuyến tính là khi chúng quá lớn. MATLAB sử dụng một số nguyên 32 bit để lưu trữ các chỉ mục này. Vì vậy, nếu mảng của bạn có nhiều hơn tổng cộng 2 ^ 32 phần tử trong đó, thì chỉ mục tuyến tính sẽ không thành công. Nó thực sự chỉ là một vấn đề nếu bạn sử dụng ma trận thưa thớt thường xuyên, đôi khi điều này sẽ gây ra sự cố. (Mặc dù tôi không sử dụng bản phát hành MATLAB 64 bit, nhưng tôi tin rằng vấn đề đó đã được giải quyết cho những người may mắn.)