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

Prevent MATLAB from turning single element arrays into a non-array type

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

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

然而,

example{1}

returns 一个 1x2 元胞数组,而

example{2}

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

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

在 MATLAB 中,标量实体和 1 x 1 数组之间没有区别。标量只是数组的 1 x 1 版本。没有特殊的数组 class,数组只是 a list of objects that have the same class. This holds true regardless of whether it's a double array, a char array, a struct array, or in your case a cell array (more info here).

因此,example{2} return 是一个 1 x 1 元胞数组。您可以使用 class , size, iscell, and/or whos

测试 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 元胞数组,您的其余代码应该能够毫无问题地处理它(假设您正确编写了其余代码)。

one-element 元胞数组仍然是大小为 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}