我有一个单元格数组,其中每个单元格都包含一个字符串数组。一个例子如下:
example = {{['a'], ['b']}, {['c']}}
然而,
example{1}
返回1x2单元格数组,而
example{2}
返回一个单元格,而不是预期的1x1单元格数组。然后,此单个单元格值与封装示例单元格数组的格式不同,后者会进一步破坏计算。
我该如何解决这个问题?理想情况下,我希望能够拥有一个1x1的单元格数组,并避免任何令人讨厌的特殊情况。
答案 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单元格数组。您可以使用here,class
,size
和/或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}