В MATLAB ® существует три основных подхода к доступу к элементам массива на основе их расположения (индекса) в массиве. Эти подходы являются индексацией по положению, линейной индексацией и логической индексацией.
Наиболее распространенным способом является явное определение индексов элементов. Для примера для доступа к одной матрице элемента массива укажите номер строки, за которым следует номер столбца элемента.
A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A = 4×4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
e = A(3,2)
e = 10
e - элемент в положении 3,2 (третья строка, второй столбец) A.
Можно также ссылаться на несколько элементов за раз, задавая их индексы в векторе. Например, доступ к первому и третьему элементам второй строки A.
r = A(2,[1 3])
r = 1×2
5 7
Для доступа к элементам в области значений строк или столбцов используйте colon. Например, доступ к элементам в первой-третьей строке и во втором-четвертом столбце A.
r = A(1:3,2:4)
r = 3×3
2 3 4
6 7 8
10 11 12
Альтернативный способ вычисления r - использовать ключевое слово end для задания второго столбца в последнем столбце. Этот подход позволяет вам задать последний столбец, не зная, сколько именно столбцов в A.
r = A(1:3,2:end)
r = 3×3
2 3 4
6 7 8
10 11 12
Если необходимо получить доступ ко всем строкам или столбцам, используйте оператор двоеточия самостоятельно. Например, верните весь третий столбец A.
r = A(:,3)
r = 4×1
3
7
11
15
В целом можно использовать индексацию для доступа к элементам любого массива в MATLAB независимо от его типа данных или размерностей. Например, прямой доступ к столбцу datetime массив.
t = [datetime(2018,1:5,1); datetime(2019,1:5,1)]
t = 2x5 datetime
01-Jan-2018 01-Feb-2018 01-Mar-2018 01-Apr-2018 01-May-2018
01-Jan-2019 01-Feb-2019 01-Mar-2019 01-Apr-2019 01-May-2019
march1 = t(:,3)
march1 = 2x1 datetime
01-Mar-2018
01-Mar-2019
Для массивов более высоких размерностей разверните синтаксис, чтобы соответствовать измерениям массива. Рассмотрите случайный числовой массив 3 на 3 на 3. Доступ к элементу во второй строке, третьем столбце и первом листе массива.
A = rand(3,3,3); e = A(2,3,1)
e = 0.5469
Дополнительные сведения о работе с многомерными массивами см. в разделе Многомерные массивы.
Другой метод доступа к элементам массива состоит в том, чтобы использовать только один индекс, независимо от размера или размерностей массива. Этот метод известен как линейная индексация. В то время как MATLAB отображает массивы в соответствии с их определенными размерами и формами, они фактически хранятся в памяти как один столбец элементов. Хороший способ визуализировать эту концепцию с помощью матрицы. В то время как следующий массив отображается как матрица 3 на 3, MATLAB хранит его как один столбец, составленный из столбцов A добавляется один за другим. Сохраненный вектор содержит последовательность элементов 12, 45, 33, 36, 29, 25, 91, 48, 11, и может отображаться с помощью одного двоеточия.
A = [12 36 91; 45 29 48; 33 25 11]
A = 3×3
12 36 91
45 29 48
33 25 11
Alinear = A(:)
Alinear = 9×1
12
45
33
36
29
25
91
48
11
Для примера элемент 3,2 A является 25, и вы можете получить к нему доступ с помощью синтаксиса A(3,2). Вы также можете получить доступ к этому элементу с помощью синтаксиса A(6), с 25 является шестым элементом сохраненной векторной последовательности.
e = A(3,2)
e = 25
elinear = A(6)
elinear = 25
Хотя линейная индексация может быть менее интуитивно понятной, она может быть мощной для выполнения определенных расчетов, которые не зависят от размера или формы массива. Например, можно легко суммировать все элементы A без необходимости предоставления второго аргумента sum функция.
s = sum(A(:))
s = 330
The sub2ind и ind2sub функции помогают преобразовать между индексами исходного массива и их линейной версией. Для примера вычислите линейный индекс элемента 3,2 A.
linearidx = sub2ind(size(A),3,2)
linearidx = 6
Преобразуйте из линейного индекса назад в форму строки и столбца.
[row,col] = ind2sub(size(A),6)
row = 3
col = 2
Использование истинных и ложных логических индикаторов является еще одним полезным способом индексации в массивы, особенно при работе с условными операторами. Например, скажите, что вы хотите знать, являются ли элементы массива матрицы A меньше соответствующих элементов другой матрицы B. Оператор «меньше, чем» возвращает логический массив, элементы которого 1 когда элемент в A меньше, чем соответствующий элемент в B.
A = [1 2 6; 4 3 6]
A = 2×3
1 2 6
4 3 6
B = [0 3 7; 3 7 5]
B = 2×3
0 3 7
3 7 5
ind = A<B
ind = 2x3 logical array
0 1 1
0 1 0
Теперь, когда известно местоположение элементов, удовлетворяющих условию, можно просмотреть отдельные значения с помощью ind как массив индексов. MATLAB соответствует расположению значения 1 в ind к соответствующим элементам A и B, и приводит их значения в вектор-столбец.
Avals = A(ind)
Avals = 3×1
2
3
6
Bvals = B(ind)
Bvals = 3×1
3
7
7
Функции MATLAB «is» также возвращают логические массивы, которые указывают, какие элементы входа отвечают определенному условию. Например, проверяйте, какие элементы массива string вектор отсутствует с помощью ismissing функция.
str = ["A" "B" missing "D" "E" missing]; ind = ismissing(str)
ind = 1x6 logical array
0 0 1 0 0 1
Предположим, что вы хотите найти значения элементов, которые не отсутствуют. Используйте ~ оператор с вектором индекса ind для этого.
strvals = str(~ind)
strvals = 1x4 string
"A" "B" "D" "E"
Для получения дополнительных примеров, использующих логическое индексирование, смотрите Найти элементы массива, которые соответствуют условию.