防止 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}
我有一个元胞数组,其中每个元胞都包含一个字符串数组。举例如下:
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}