防止MATLAB将单个元素数组转换为非数组类型

时间:2017-01-26 15:19:56

标签: arrays matlab cells

我有一个单元格数组,其中每个单元格都包含一个字符串数组。一个例子如下:

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

然而,

example{1}

返回1x2单元格数组,而

example{2}

返回一个单元格,而不是预期的1x1单元格数组。然后,此单个单元格值与封装示例单元格数组的格式不同,后者会进一步破坏计算。

我该如何解决这个问题?理想情况下,我希望能够拥有一个1x1的单元格数组,并避免任何令人讨厌的特殊情况。

2 个答案:

答案 0 :(得分:3)

在MATLAB中,标量实体和1 x 1数组之间没有区别。标量只是阵列的1 x 1版本。没有特殊的数组类,而数组只是a list of objects that have the same class。无论是double数组,char数组,struct数组,还是cell数组(更多信息{{},都可以这样做3}})。

因此,example{2} 返回1 x 1单元格数组。您可以使用hereclasssize和/或iscell

来测试example{2}实际上是1 x 1的单元格
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 x 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}