将 Matlab 数组转换为元胞数组

Posted

技术标签:

【中文标题】将 Matlab 数组转换为元胞数组【英文标题】:Convert Matlab array into cell array 【发布时间】:2012-12-06 09:24:44 【问题描述】:

我无法将 matlab 数组转换为单元格值数组。

stacksize = size(resultStack.('f'),1); % 2897 values
exportc = cell(stacksize+1, 4);

exportc1,1 = 'top';
exportc1,2 = 'bottom';
exportc1,3 = 'left';
exportc1,4 = 'right';

exportc2:end,: = mat2cell(resultStack.('f'), 1:stacksize, 1:4);

以错误结束

输入参数 D1 到 D2 必须与输入矩阵大小 [2897 4] 的每个维度相加。

我做错了什么?

【问题讨论】:

【参考方案1】:

您没有正确使用mat2cell。使用方法如下:

C = mat2cell(resultStack.('f'), ones(stacksize,1), ones(1,4)) 

这意味着:您指定输出单元格C 的每一行应包含resultStack.f 的下1 行和1 列(这就是所有这些1 背后的原因)。

此外,正如 Colin T. Bowers 所指出的,您应该使用 barece-indexing (()) 从另一个单元格复制内容,并且仅在 检索时使用括号索引 () 来自单元格的数据。

因此,您的代码的完整、更正版本应该是:

stacksize = size(resultStack.('f'),1); % 2897 values
exportc = cell(stacksize+1, 4);

exportc(1,:) = 'top' 'bottom' 'left' 'right';
exportc(2:end,:) = mat2cell(resultStack.('f'), ones(stacksize,1), ones(1,4));

或者,由于您想要的输出允许,您可以使用更新、更好、更简单的num2cell 命令:

exportc(1,:)     = 'top' 'bottom' 'left' 'right';
exportc(2:end,:) = num2cell(resultStack.('f'));

【讨论】:

哎呀+1,我不应该假设只有一个问题。很好的收获。 @ColinTBowers:如果我在编程生涯中学到了一件事,那就是 testtesttest测试测试测试测试测试测试、测试测试测试测试测试、testtesttesttest,然后再次test :)跨度> 这里合适的元是什么?我应该删除我的答案,还是保留我当前合并的更新,将 OP 指向您的答案? @ColinTBowers:不,我会离开它。像你这样的答案对于路人了解获得接受答案的过程仍然非常有用。不确定官方对此的看法是什么......【参考方案2】:

更新: Rody 在您的代码中发现了第二个问题,除了我在这里提到的问题。您应该将他完全正确的解决方案合并到您的代码中,如果您对它感到满意,请将他的回复标记为答案。不要将此回复标记为答案,因为它不完整。

在将元胞数组分配给另一个元胞数组的子集时使用括号(),例如

%# A simple example
A = cell(2, 2);
B = 'hello', 'world';
A(1, :) = B;

在您的代码中,您需要将最后一行更改为:

exportc(2:end,:) = mat2cell(resultStack.('f'), 1:stacksize, 1:4);

请注意,花括号 保留用于索引到元胞数组的单个元胞的内容。

【讨论】:

以上是关于将 Matlab 数组转换为元胞数组的主要内容,如果未能解决你的问题,请参考以下文章

matlab怎样把cell函数转换为一般矩阵形式?

matlab怎样把cell函数转换为一般矩阵形式?

MATLAB将元胞数组中特定行列转换为矩阵

Matlab怎么把元胞数组转化成矩阵

Matlab:将单元格数组转换为单个单元格数组

Matlab怎么把元胞数组转化成矩阵