Существует две основные причины использования массивов ячеек: хранение данных разных типов или хранение данных разных размеров . Предполагая, что x
и y
являются скалярными индексами в вашем примере, тогда cellArr
- это массив ячеек с ячейкой, индексированной x
, содержащей другой массив ячеек, чья ячейка с индексом y
содержит двумерный массив ячеек где хранятся ваши метки вершин.
Теперь, если все ваши метки вершин имеют один и тот же тип данных и - это всего лишь единичные непустые (т.е. не []
) значения, тогда двумерная ячейка Массив на самом низком уровне можно превратить в двумерный числовой массив, и ваша индексация будет выглядеть так:
cellArr{x}{y}(3,8) = 1.0; %# Note the use of () instead of {}
Теперь возникает вопрос, как обращаться с двумя вмещающими наборами массивов ячеек, индексированных x
и y
. Если каждая ячейка, которая может быть проиндексирована с помощью y
, содержит двумерные числовые массивы одинакового размера и типа , то этот массив ячеек можно превратить в трехмерный числовой массив, который можно индексировать как так:
cellArr{x}(3,8,y) = 1.0; %# Here I've chosen to use y as the third dimension
Наконец, если каждая ячейка, которая может быть проиндексирована с помощью x
, содержит трехмерные числовые массивы, которые снова имеют одинакового размера и типа , тогда cellArr
можно превратить в 4- Числовой массив D, который можно индексировать следующим образом:
numArr(3,8,y,x) = 1.0;
Вы можете изменить порядок индексов (т. Е. Размеры numArr
) по своему вкусу, но я поставлю x
и y
в конце, чтобы при индексировании подмассива меток вершин, например, numArr(:,:,y,x)
он вернет его как двумерный массив. Если бы вы упорядочили индексы таким образом, чтобы индексировать подмассив меток вершин, например numArr(x,y,:,:)
, он вернет результат в виде 4-D массива с единицами для двух ведущих одноэлементных измерений (которые вы должны удалить, используя такие функции, как SQUEEZE ).