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

时间:2012-12-06 09:24:45

标签: matlab cells

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

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

exportc{1,1} = 'top';
exportc{1,2} = 'bottom';
exportc{1,3} = 'left';
exportc{1,4} = 'right';

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

以错误

结束
  

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

我做错了什么?

2 个答案:

答案 0 :(得分:3)

您没有正确使用mat2cell。以下是如何使用它:

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

这意味着:您指定输出单元格C的每一行应包含resultStack.f的下一行和一列(这是所有这些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 :(得分:0)

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

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

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

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

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

请注意,大括号{}保留用于索引单元格数组的单个单元格的内容。