为什么Matlab中的单元阵列结构表现不佳,并且一直在构建向量



假设我有两个简单的向量;

vec1=[1,2,3];
vec2=[4,5,6];

现在我用它们做一个细胞阵列。

cellArray1={vec1,vec2}

如果我想创建一个2x3的数字数组,它很简单。

[vec1;vec2]
%or
[cellArray1{1};cellArray{2}]

然而,要从上面制作一个2x3单元阵列,它的行为并不像预期的那样。

{vec1(1,:);vex2(1,:)}
{cellArray1{1};cellArray1{2}}
{cellArray1{1}(1,:),cellArray1(1,:)}

没有人给我一个2x3的细胞阵列。为什么会这样,以及如何以一种非常正式和高效的方式创建一个2x3单元数组,该数组的每个条目中只包含双值。我不认为使用cell2mat或用{~,~,~;~,~,~}编写另一个点m文件的代码是好的做法,运行生成的新文件会创建感兴趣的单元阵列。

这是经过设计的。

单元数组可以包含任何,因此语言没有经过优化以解释事物是相同的形状。

如果size(vec1(1,:))是1x1并且size(vex2(1,:))是1x50,则以下应该仍然有效(与[]不同(。

{vec1(1,:);vex2(1,:)}

如果cellArray1{1}是图形句柄,cellArray1{2}是字符串,则下面的应该仍然有效(与[]不同(。

{cellArray1{1};cellArray1{2}}

请参阅第一个示例,了解为什么应该适用于任何形状:

{cellArray1{1}(1,:),cellArray1(1,:)}

单元数组可以接受很多东西作为输入,这没问题。因此,他们不能假设你为创建单元输入的是1x3数值数组,因此他们不能表现得像是创建2x3单元数组。即使他们可以检查并采取相应的行动,那么你也会有不一致的行为,这取决于输入的数值向量的长度

方括号实际上可以假设两个向量的大小相同,否则会出错。

将Cell数组视为可以在每个元素中包含任何内容的列表,而不是数字数组。如果你只使用数值数组,建议你使用向量/矩阵,而不是单元数组。

这里有一种方法可以获得我在问题中想要的数据结构,而无需使用cell2mat或代码文件编写然后运行编写的代码文件。

[num2cell(cellArray1{1});num2cell(cellArray1{2})]
% or
vertcat(num2cell(cellArray1{1}),num2cell(cellArray1{2}))

相关内容

  • 没有找到相关文章

最新更新