Многомерный массив в 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