Ідея лінійного індексу для масивів у matlab є важливою. Масив у MATLAB - це насправді просто вектор елементів, нанесених на пам'ять. MATLAB дозволяє використовувати або індекс рядка та стовпця, або один лінійний індекс. Наприклад,
A = magic(3)
A =
8 1 6
3 5 7
4 9 2
A(2,3)
ans =
7
A(8)
ans =
7
Ми можемо побачити порядок збереження елементів у пам’яті, розгорнувши масив у вектор.
A(:)
ans =
8
3
4
1
5
9
6
7
2
Як бачите, 8-м елементом є число 7. Насправді функція find повертає свої результати у вигляді лінійного індексу.
find(A>6)
ans =
1
6
8
Результатом є те, що ми можемо отримати доступ до кожного елемента по черзі загального nd-масиву, використовуючи єдиний цикл. Наприклад, якби ми хотіли квадратувати елементи A (так, я знаю, що є кращі способи зробити це), можна зробити це:
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
Існує багато обставин, коли лінійний індекс є більш корисним. Перетворення між лінійним індексом та двома (або вищими) розмірними індексами здійснюється за допомогою функцій sub2ind та ind2sub.
Лінійний індекс застосовується загалом до будь-якого масиву в matlab. Тож ви можете використовувати його на структурах, масивах комірок тощо. Єдина проблема з лінійним індексом полягає в тому, що вони стають занадто великими. MATLAB використовує 32-бітове ціле число для зберігання цих індексів. Отже, якщо у вашому масиві більше 2 ^ 32 елементів, лінійний індекс зазнає невдачі. Це насправді проблема лише в тому, що ви часто використовуєте розріджені матриці, іноді це може спричинити проблему. (Хоча я не використовую 64-розрядний випуск MATLAB, я вважаю, що проблема вирішена для тих щасливих людей, які це роблять.)