Мы используем различные формы индексирования в Matlab:
- стандарт (используя целые числа вдоль каждого измерения),
- логический (с использованием логических значений),
- linear (используя один индекс для перемещения массива с более чем одним измерением).
На первый взгляд может показаться, что эти формы являются исключительными: индекс является либо стандартным, либо логическим, либо линейным. Однако иногда появляется смесь между несколькими из этих форм. Например,
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> A(A>5)
ans =
8
9
6
7
Это логическое индексирование, правильно? Но он также имеет некоторые особенности линейной индексации, потому что возвращается вектор столбца. Фактически, логический индекс A>5
имеет тот же эффект, что и линейный индекс find(A>5)
.
В качестве второго примера рассмотрим
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> A(1:2, [true false true])
ans =
8 6
3 7
В этом выражении для первой координаты используется стандартная (целочисленная) индексация, а для второй используется логическая индексация.
Эти примеры (и более сложные, которые возникают на практике) задают следующие вопросы:
- Какие типы индексирования существуют в Matlab?
- Как их можно комбинировать?
- Как их следует ссылаться?