我无法将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]。
我做错了什么?
答案 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);
请注意,大括号{}
保留用于索引单元格数组的单个单元格的内容。