MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

MATLAB

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава 5. Многомерные массивы

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

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

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

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

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

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

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

5 7 8
0 1 9
4 3 6

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

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

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

5 7 8
0 1 9
4 3 6

                    A(:, :, 2) =

1 0 4
3 5 6
9 8 7

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

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

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

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

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

Пример.

           A(:, :, 3) = 5

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

Рис. 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)=
5 5 5
5 5 5
5 5 5
A(:,:,3,2)=
1 0 1
1 1 0
0 1 1
A(:,:,2,1)=
1 0 4
3 5 6
9 8 7
A(:,:,2,2)=
9 8 7
6 5 4
3 2 1
A(:,:,1,1)=
5 7 8
0 1 9
4 3 6
A(:,:,3,1)=
1 2 3
4 5 6
7 8 9

Рис. 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) =

5 5 5 5
5 5 5 5
5 5 5 5

            B(:, :, 2) =

5 5 5 5
5 5 5 5
5 5 5 5

Замечание:

Если хотя бы одна из размерностей массива имеет значение 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) =

2 8
0 5

                B(:, :, 2) =

1 3
7 9

Функция 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)=
7 1
8 4
D(:,:,2,2)=
5 6
2 1
D(:,:,2,3)=
4 3
2 1
D(:,:,1,1)=
9 2
6 5
D(:,:,1,2)=
3 5
0 1
D(:,:,1,3)=
1 2
3 4

Рис. 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)=
1 2
4 5
C(:,:,1,2)=
7 8
3 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)=
7 8
3 2

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

A(:,:,1,1,1)=
1 2
4 5

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

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

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

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика