Формирование многомерных массивов
Для создания многомерных массивов можно использовать те же приемы индексирования и применения встроенных функций, которые используются при создании двумерных массивов. Тем не менее в системе 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
|
|
|
Рис. 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]
|
|
|
|
|
|
Рис. 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]))
|
|
|
|
|
|
Рис. 5.6. 4-мерный массив размера 2х2х2х3.
Функция cat автоматически добавляет промежуточные индексы, равные 1, если в этом возникает необходимость.
Пример.
Сформировать 4-мерный массив, разместив вдоль четвертой размерности два массива размера 2х2:
C = cat(4, [1 2; 4 5], [7 8; 3 2])
|
|
Рис. 5.7. 4-мерный массив размера 2х2х1х2.
Сформированный 4-мерный массив имеет размер 2х2х1х2.
Если бы аргумент dim был равен 5, то был бы сформирован 5-мерный массив размера 2х2х1х1х2. С учетом принятых допущений его можно было бы изобразить следующим образом
|
----------------------------------------------------------
|
Рис. 5.8. 5-мерный массив размера 2х2х1х1х2.
Характеристики многомерного массива. Для получения информации о характеристиках многомерного массива используются следующие функции:
- whos - информация о типе массива и используемой памяти;
- ndims - количество размерностей;
- size - размер массива.
Извлекаемая информация | Функция | Пример | |||||||||||||||||||||
Имя, размер, количество байтов используемой памяти, тип массива | whos |
| |||||||||||||||||||||
Количество размерностей | ndims | ndims(D) ans = 4 | |||||||||||||||||||||
Размер массива | size | size(D) ans = 2 2 2 3 |