Многомерный массив в MATLAB® является массивом больше чем с двумя размерностями. В матрице эти две размерности представлены строками и столбцами.
Каждый элемент задан двумя индексами, индексом строки и индексом столбца. Многомерные массивы являются расширением 2D матриц и используют дополнительные индексы в индексации. Трехмерный массив, например, использует три индекса. Первые два точно так же, как матрица, но третья размерность представляет страницы или листы элементов.
Можно создать многомерный массив путем создания 2D матрицы сначала, и затем расширения его. Например, сначала задайте 3х3 матрицу как первую страницу в трехмерном массиве.
A = [1 2 3; 4 5 6; 7 8 9]
A = 3×3
1 2 3
4 5 6
7 8 9
Теперь добавьте вторую страницу. Для этого присвойте другую 3х3 матрицу значению индекса 2 в третьей размерности. Синтаксис A(:,:,2)
использует двоеточие в первых и вторых измерениях, чтобы включать все строки и все столбцы с правой стороны присвоения.
A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]
A = A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 10 11 12 13 14 15 16 17 18
cat
функция может быть полезным инструментом для создания многомерных массивов. Например, создайте новый трехмерный массив B
путем конкатенации A
с третьей страницей. Первый аргумент указывает который размерность конкатенировать вперед.
B = cat(3,A,[3 2 1; 0 9 8; 5 3 7])
B = B(:,:,1) = 1 2 3 4 5 6 7 8 9 B(:,:,2) = 10 11 12 13 14 15 16 17 18 B(:,:,3) = 3 2 1 0 9 8 5 3 7
Иначе быстро расширить многомерный массив путем присвоения одного элемента целой странице. Например, добавьте четвертую страницу в B
это содержит все нули.
B(:,:,4) = 0
B = B(:,:,1) = 1 2 3 4 5 6 7 8 9 B(:,:,2) = 10 11 12 13 14 15 16 17 18 B(:,:,3) = 3 2 1 0 9 8 5 3 7 B(:,:,4) = 0 0 0 0 0 0 0 0 0
Для доступа к элементам в многомерном массиве используйте целочисленные индексы, так же как для векторов и матриц. Например, найдите 1,2,2 элемента A
, который находится в первой строке, втором столбце и второй странице A
.
A
A = A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 10 11 12 13 14 15 16 17 18
elA = A(1,2,2)
elA = 11
Используйте вектор индекса [1 3]
во втором измерении, чтобы получить доступ только к первым и последним столбцам каждой страницы A
.
C = A(:,[1 3],:)
C = C(:,:,1) = 1 3 4 6 7 9 C(:,:,2) = 10 12 13 15 16 18
Чтобы найти вторые и третьи строки каждой страницы, используйте оператор двоеточия, чтобы создать ваш вектор индекса.
D = A(2:3,:,:)
D = D(:,:,1) = 4 5 6 7 8 9 D(:,:,2) = 13 14 15 16 17 18
Элементы многомерных массивов могут быть перемещены во многих отношениях, похожие на векторы и матрицы. reshape
перестановка
, и squeeze
полезные функции для реорганизации элементов. Рассмотрите трехмерный массив с двумя страницами.
Изменение размерность многомерного массива может быть полезно для выполнения определенных операций или визуализации данных. Используйте reshape
функционируйте, чтобы перестроить элементы трехмерного массива в 6 5 матрица.
A = [1 2 3 4 5; 9 0 6 3 7; 8 1 5 0 2]; A(:,:,2) = [9 7 8 5 2; 3 5 8 5 1; 6 9 4 3 3]; B = reshape(A,[6 5])
B = 6×5
1 3 5 7 5
9 6 7 5 5
8 5 2 9 3
2 4 9 8 2
0 3 3 8 1
1 0 6 4 3
reshape
действует по столбцам, создавая новую матрицу путем взятия последовательных элементов вниз каждый столбец A
, Начиная с первой страницы, затем перемещающейся во вторую страницу.
Сочетания используются, чтобы перестроить порядок размерностей массива. Считайте трехмерный массив M
.
M(:,:,1) = [1 2 3; 4 5 6; 7 8 9]; M(:,:,2) = [0 5 4; 2 7 6; 9 3 1]
M = M(:,:,1) = 1 2 3 4 5 6 7 8 9 M(:,:,2) = 0 5 4 2 7 6 9 3 1
Используйте permute
функционируйте, чтобы обменяться индексами строки и столбца на каждой странице путем определения порядка размерностей во втором аргументе. Исходные строки M
теперь столбцы, и столбцы являются теперь строками.
P1 = permute(M,[2 1 3])
P1 = P1(:,:,1) = 1 4 7 2 5 8 3 6 9 P1(:,:,2) = 0 2 9 5 7 3 4 6 1
Точно так же обменяйтесь строкой и индексами страницы M
.
P2 = permute(M,[3 2 1])
P2 = P2(:,:,1) = 1 2 3 0 5 4 P2(:,:,2) = 4 5 6 2 7 6 P2(:,:,3) = 7 8 9 9 3 1
При работе с многомерными массивами вы можете столкнуться с тем, который имеет ненужную размерность длины 1. squeeze
функция выполняет другой тип манипуляции, которая устраняет размерности длины 1. Например, используйте repmat
функция, чтобы создать 2 3 массивом 1 на 4, элементы которого - каждый 5, и чья третья размерность имеет длину 1.
A = repmat(5,[2 3 1 4])
A = A(:,:,1,1) = 5 5 5 5 5 5 A(:,:,1,2) = 5 5 5 5 5 5 A(:,:,1,3) = 5 5 5 5 5 5 A(:,:,1,4) = 5 5 5 5 5 5
szA = size(A)
szA = 1×4
2 3 1 4
numdimsA = ndims(A)
numdimsA = 4
Используйте squeeze
функция, чтобы удалить третью размерность, приводящую к трехмерному массиву.
B = squeeze(A)
B = B(:,:,1) = 5 5 5 5 5 5 B(:,:,2) = 5 5 5 5 5 5 B(:,:,3) = 5 5 5 5 5 5 B(:,:,4) = 5 5 5 5 5 5
szB = size(B)
szB = 1×3
2 3 4
numdimsB = ndims(B)
numdimsB = 3