Многомерные массивы

Многомерный массив в MATLAB ® является массивом с более чем двумя размерностями. В матрице две размерности представлены строками и столбцами .

Каждый элемент определяется двумя индексами, индексом строки и индексом столбца. Многомерные массивы являются расширением 2-D матриц и используют дополнительные индексы для индексации. А трехмерный массив, для примера, использует три нижних индекса. Первые два аналогичны матрице, но третья размерность представляет страницы или листы элементов.

Создание многомерных массивов

Можно создать многомерный массив, сначала создав 2-D матрицу, а затем удлинив ее. Например, сначала задайте матрицу 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

The 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, permute, и 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. The 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

Похожие темы