2017-01-26 16 views
2

У меня есть массив ячеек, где каждая ячейка содержит массив строк. Пример заключается в следующем:Предотвращение превращения MATLAB в одиночные массивы в тип без массива

example = {{['a'], ['b']}, {['c']}} 

Однако

example{1} 

возвращает массив 1х2 клеток, в то время как

example{2} 

возвращает ячейку, а не массив 1х1 клеток, как и ожидалось. Это одиночное значение ячейки тогда не в том же формате, что и инкапсулирующий массив ячеек примеров, который разбивает вычисления дальше по строке.

Как исправить это? В идеале я хотел бы иметь массив клеток 1x1 и избегать любых неприятных особых случаев.

ответ

3

В MATLAB нет разницы между скалярным объектом и массивом 1 x 1. Скаляр представляет собой просто 1 х 1 версию массива. Нет специального класса массива, вместо этого массив равен a list of objects that have the same class. Это справедливо независимо от того, массив double, массив char, массив struct или в вашем случае массив cell (больше информации here).

Таким образом, example{2} возвращает 1 х 1 ячейку. Вы можете проверить example{2} на самом деле представляет собой 1 х 1 клеток с помощью class, size, iscell и/или whos

class(example{2}) 
% cell 

size(example{2}) 
% 1 1 

iscell(example{2}) 
% 1 

tmp = example{2}; 
whos('tmp') 
% Name  Size   Bytes Class Attributes 
% 
% tmp  1x1    114 cell 

Поскольку это массив ячеек 1 х 1, остальная часть кода должна быть в состоянии обрабатывать это без каких-либо проблем (при условии, что вы правильно написали остальную часть кода).

2

Одноэлементный массив ячеек по-прежнему является массивом ячеек размером 1x1. Обратите внимание:

>> class(example{1}) 
ans = 
cell 
>> class(example{2}) 
ans = 
cell 
>> size(example{1}) 
ans = 
    1  2 
>> size(example{2}) 
ans = 
    1  1 

Вы можете либо тест отдельно, если ваш массив имеет размер 1x1, в частности, далее вниз кода, или, рассмотреть вопрос о целесообразности индексации массив ячеек с помощью () синтаксиса как-то более полезным для вас, например:

>> example(1) 
ans = 
    {1x2 cell} 
>> example(2) 
ans = 
    {1x1 cell} 

 Смежные вопросы

  • Нет связанных вопросов^_^