Ячейки

Для хранения в матричном виде элементов различных типов используются ячейки.

Создание матрицы ячеек

Для создания матриц ячеек используется функция 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