Формирование многомерных массивов

Для создания многомерных массивов можно использовать те же приемы индексирования и применения встроенных функций, которые используются при создании двумерных массивов. Тем не менее в системе MATLAB добавлена специальная функция cat, которая позволяет сформировать структуру многомерного массива. Таким образом, можно определить три подхода к созданию многомерных массивов:

  • использование индексов;
  • использование встроенных функций для формирования массивов специального вида;
  • использование функции cat.

Использование индексов. Один из способов формирования многомерного массива вытекает из его представления как совокупности 2-мерных массивов, размещаемых на новых страницах. Он состоит в том, чтобы просто добавлять новые размерности для формирования нужных страниц (3-ю, 4-ю, 5-ю и т. д.).

Пример.

Сначала сформируем двумерный массив A:

A = [5 7 8; 0 1 9; 4 3 6];
A =

Этот массив имеет размерность 2 и размер 3х3.

Добавим новую страницу в третьей размерности массива с помощью следующего оператора присваивания

A(:, :, 2) = [1 0 4; 3 5 6; 9 8 7]
A(:, :, 1) =

A(:, :, 2) =

Сформирован массив А размерности 3 и размера 3х3х2.

Можно продолжить добавлять строки, столбцы и страницы с целью формирования многомерных массивов различных размерностей и размеров.

Для изменения размерности многомерного массива нужно:

  • уменьшить или увеличить соответствующий индекс;
  • присвоить одному или нескольким ранее не существовавшим элементам некоторые значения; в этом случае для числовых массивов произойдет увеличение количества строк, столбцов или страниц, поскольку структура числового массива требует одинакового количества строк, одинакового количества столбцов, одинакового количества страниц в соответствующих размерностях.

Реализованный в системе MATLAB механизм присваивания скаляра массиву вместе с механизмом индексации позволяет заполнять целые страницы массива, используя одно число.

Пример.

A(:, :, 3) = 5

 
A(:,:,3)=
 
 
A(:,:,2)=
 
 
A(:,:,1)=
 

Рис. 5.4. 3-мерный массив размера 3х3х3.

Дополним массив А четвертой размерностью, введя

A(:, :, 1, 2) = [1 2 3; 4 5 6; 7 8 9];
A(:, :, 2, 2) = [9 8 7; 6 5 4; 3 2 1];
A(:, :, 3, 2) = [1 0 1; 1 1 0; 0 1 1]

 
A(:,:,3,1)=
 
A(:,:,3,2)=
 
A(:,:,2,1)=
 
A(:,:,2,2)=
 
A(:,:,1,1)=
 
A(:,:,3,1)=

Рис. 5.5. 4-мерный массив размера 3х3х3х2.

Использование встроенных функций. Такие встроенные функции системы MATLAB, как randn, ones и zeros, могут быть использованы для формирования многомерных массивов, поскольку каждый аргумент такой функции определяет размер соответствующего измерения.

Пример.

Сформировать 3-мерный массив нормально распределенных случайных чисел размера 4х3х2:

B = randn(4, 3, 2)
B(:, :, 1) =

-0.4326 -1.1465 0.3273
-1.6656 1.1909 0.1746
0.1253 1.1892 -0.1867
0.2877 -0.0376 0.7258

B(:, :, 2) =

-0.5883 1.0668 0.2944
2.1832 0.0593 -1.3362
-0.1364 -0.0956 0.7143
0.1139 -0.8323 1.6236

Чтобы сформировать массив, заполненный константой, удобно применить функцию repmat. Эта функция использует заданный массив (в случае константы - размера 1х1) для формирования многомерного массива в соответствии с его размерностью:

B = repmat(5, [3 4 2])
B(:, :, 1) =

B(:, :, 2) =

Замечание:

Если хотя бы одна из размерностей массива имеет значение 0, то это означает, что многомерный массив - пустой.

Использование функции cat. Применение функции cat существенно упрощает формирование многомерных массивов, поскольку позволяет задать размещение 2-мерных массивов вдоль указанной размерности, используя следующий синтаксис:

B = cat(dim, A1, A2 ...),
где dim - номер размерности, вдоль которой размещаются массивы.
A1, A2, ….. - список 2-мерных массивов;

Пример.

Сформируем 3-мерный массив, который объединяет два 2-мерных массива размера 2х2:

B = cat(3, [2 8; 0 5], [1 3; 7 9])
B(:, :, 1) =

B(:, :, 2) =

Функция cat допускает использование любых комбинаций существующих и вновь вводимых данных.

Пример.

Сформировать 4-мерный массив D с помощью следующей последовательности операторов cat:

A = cat(3, [9 2; 6 5], [7 1; 8 4]);
B = cat(3, [3 5; 0 1], [5 6; 2 1]);
D = cat(4, A, B, cat(3, [1 2; 3 4], [4 3; 2 1]))

 
D(:,:,2,1)=
 
D(:,:,2,2)=
 
D(:,:,2,3)=
D(:,:,1,1)=
 
D(:,:,1,2)=
 
D(:,:,1,3)=

Рис. 5.6. 4-мерный массив размера 2х2х2х3.

Функция cat автоматически добавляет промежуточные индексы, равные 1, если в этом возникает необходимость.

Пример.

Сформировать 4-мерный массив, разместив вдоль четвертой размерности два массива размера 2х2:

C = cat(4, [1 2; 4 5], [7 8; 3 2])

 
C(:,:,1,1)=
 
C(:,:,1,2)=

Рис. 5.7. 4-мерный массив размера 2х2х1х2.

Сформированный 4-мерный массив имеет размер 2х2х1х2.

Если бы аргумент dim был равен 5, то был бы сформирован 5-мерный массив размера 2х2х1х1х2. С учетом принятых допущений его можно было бы изобразить следующим образом

 
C(:,:,1,1,2)=
 

----------------------------------------------------------

 
A(:,:,1,1,1)=
 

Рис. 5.8. 5-мерный массив размера 2х2х1х1х2.

Характеристики многомерного массива. Для получения информации о характеристиках многомерного массива используются следующие функции:

  • whos - информация о типе массива и используемой памяти;
  • ndims - количество размерностей;
  • size - размер массива.
Извлекаемая информация Функция Пример
Имя, размер, количество байтов используемой памяти, тип массива whos
Name Size Bytes Class
A 2x2x2 double array
B 2x2x2 double array
C 4-D double array
D 4-D double array
Grand total is 48 elements using 384 bytes
Количество размерностей ndims ndims(D) ans = 4
Размер массива size size(D) ans = 2 2 2 3

Наши рекомендации