В 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"
Для получения дополнительных примеров, использующих логическое индексирование, смотрите Найти элементы массива, которые соответствуют условию.