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

Массивы с числом размерностей более двух считаются многомерными. Такие массивы могут быть считаны из файла или созданы при помощи команд, таких как zeros, ones, rand. Число параметров при обращении к этим командам должно соответствовать размерности вводимого массива [3]. Например, трёхмерный массив 2х4х2 из нулей будет организован по команде:

>> S=zeros(2,4,2)

S(:,:,1) =

0 0 0 0

0 0 0 0

S(:,:,2) =

0 0 0 0

0 0 0 0

Обращение к элементам многомерного массива производятся по обычным правилам работы с массивами, так что действуют двоеточия для указания диапазона, а end обозначает максимальное значение данной размерности. Чтобы изменить какой-нибудь элемент, достаточно присвоить ему значение точно так же, как для обычных массивов, а если элемента не было, то произойдёт увеличение размерности массива:

>> S(3,1,2)=13; size(S(:,:,1))

ans = 3 4

Заметим, что пополнение массива означает дополнительные затраты времени на переписывание данных. Поэтому для повышения скорости расчёта рекомендуется описывать максимальную размерность массива сразу (резервировать память), если это возможно. Когда многомерный массив организуется для хранения нескольких матриц одинакового размера, то первые два индекса удобнее отвести под строки и столбцы матриц, а последний индекс – для номера матрицы. Тогда в результате получим:

>> S2=S(:,:,end)

S2 =

0 0 0 0

0 0 0 0

13 0 0 0

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

Массивы ячеек

Для хранения разнородных объектов (массивов разных размерностей, разнотипных данных) удобно пользоваться массивами ячеек, которые создаются двумя способами: по команде cell или заключением объектов в круглые скобки. Например:

>> C={sum(S) min(max(S)) sum(sum(sum(S)))}

C = [1x4x2 double] [1x1x2 double] [13]

Для указания элементов массива используются фигурные скобки, так что в результате обращения к третьему элементу массива C получим число 13:

>> C{3}

ans = 13

а содержимое первого элемента массива ячеек C есть:

>> C1=C{1}

C1(:,:,1) = 0 0 0 0

C1(:,:,2) = 13 0 0 0

Для превращения структуры C1 в обычный массив можно воспользоваться командами squeeze или shiftdim, которые удаляют равные единице размерности (матрица в один столбец или одну строку превращается в вектор):

>> C2=shiftdim(C1)'

C2 =

0 0 0 0

13 0 0 0

Нужно помнить, что составные части массива ячеек представлены копиями, так что при изменении исходного массива S в объекте C никаких изменений не произойдёт. Иными словами, это не указатель на массив, а сам массив. Для преобразования массива символов в массив ячеек применяется команда cellstr, а обратная процедура реализуется командой char. Если потребуется создать текст из нескольких строк, то обычный приём отделения строк точкой с запятой может не сработать, поскольку все строки должны быть одной длины. В таких случаях можно подготовить массив ячеек:

>> C={'One';'Three';'Seven'}

C =

' One '

' Three '

' Seven '

и затем преобразовать его при помощи команды char:

>> S=char(C)

S =

One

Three

Seven

Для получения строк одной длины MATLAB добавляет нужное число пробелов, что легко увидеть, затребовав данные о размерностях массива S:

>> size(S)

ans = 3 5


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: