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