1

我无法将 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] 的每个维度相加。

我究竟做错了什么?

4

2 回答 2

3

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

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

这意味着:您指定输出单元格的每一行C都应包含接下来的 1 行和 1 列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'));
于 2012-12-06T09:45:52.310 回答
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);

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

于 2012-12-06T09:27:38.803 回答