Ячейки
Для хранения в матричном виде элементов различных типов используются ячейки.
Создание матрицы ячеек
Для создания матриц ячеек используется функция cell. Создадим пустую матрицу ячеек 3x3:
>> data = cell(3)
data =
3×3 cell array
{0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double}
Прямоугольная матрица ячеек
>> data = cell(2,3)
data =
2×3 cell array
{0×0 double} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double}
В отличие от числовых матриц, обращение к элементам матрицы ячеек выполняется при помощи индексов элементов в фигурных скобках, а не в круглых. Запишем в ячейку {1, 1} число
>> data{1,1} = 123
data =
2×3 cell array
{[ 123]} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {0×0 double}
в ячейку {2, 3} строку
>> data{2,3} = 'Текст '
data =
2×3 cell array
{[ 123]} {0×0 double} {0×0 double}
{0×0 double} {0×0 double} {'Текст ' }
а в ячейку {2, 2} матрицу
>> data{2,2} = [1 2; 3 4]
data =
2×3 cell array
{[ 123]} {0×0 double} {0×0 double}
{0×0 double} {2×2 double} {'Текст ' }
Содержимое матрицы
>> data{2,3}
ans =
'Текст '
>> data{2,2}
ans =
1 2
3 4
Преобразование
Если матрица ячеек содержит только числовые значения, то её можно преобразовать в числовую матрицу при помощи функции cell2mat.
Создадим матрицу-столбец из двух ячеек. Каждая ячейка содержит числовую матрицу строку:
>> a = {[1,2,3];[4,5,6]}
a =
2×1 cell array
{1×3 double}
{1×3 double}
Преобразование матрицы ячеек в числовую матрицу
>> cell2mat(a)
ans =
1 2 3
4 5 6
Если первая ячейка будет содержать матрицу-строку, а вторая – матрицу-столбец, то такое преобразование будет невозможно
>> a = {[1,2,3];[4;5;6]}
a =
2×1 cell array
{1×3 double}
{3×1 double}
>> cell2mat(a)
Error using cat
Dimensions of arrays being concatenated are not consistent.
Error in cell2mat (line 83)
m{n} = cat(1,c{:,n});
Обратное преобразование числовой матрицы в матрицу ячеек выполняется при помощи функции mat2cell. Предположим, что есть квадратная матрица 5x5:
>> a = magic(5)
a =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
Рассечём эту матрицу одной горизонтальной линией и двумя вертикальными так, чтобы получилась матрица ячеек 2 на 3, в которой элемент {1,1} содержит первые две строки и два столбца исходной матрицы, элемент {1,2} – две первые строки и столбцы 3 и 4 исходной матрицы:
>> c = mat2cell(a,[2 3],[2 2 1])
c =
2×3 cell array
{2×2 double} {2×2 double} {2×1 double}
{3×2 double} {3×2 double} {3×1 double}
Вторым аргументом указывается массив с количествами строк каждой подматрицы, вторым аргументом – количество столбцов у каждой подматрицы. Проверяем результат:
>> c{1,1}
ans =
17 24
23 5
>> c{1,2}
ans =
1 8
7 14
>> c{2,1}
ans =
4 6
10 12
11 18