exponenta event banner

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

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

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

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

Многомерный массив можно создать, сначала создав матрицу 2-D, а затем расширив ее. Например, сначала определите матрицу 3 на 3 как первую страницу в массиве 3-D.

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 функция может быть полезным инструментом для построения многомерных массивов. Например, создайте новый массив 3-D 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 являются полезными функциями для перестановки элементов. Рассмотрим массив 3-D с двумя страницами.

Изменение формы многомерного массива может быть полезным для выполнения определенных операций или визуализации данных. Используйте reshape функция для перегруппировки элементов массива 3-D в матрицу 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, начиная с первой страницы, затем переходя ко второй странице.

Перестановки используются для перестановки порядка размерностей массива. Рассмотрим массив 3-D 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 для удаления третьего измерения, что приводит к 3-D массиву.

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

Связанные темы