Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab阵列到单元阵列的转换_Matlab_Cells - Fatal编程技术网

Matlab阵列到单元阵列的转换

Matlab阵列到单元阵列的转换,matlab,cells,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'),

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


我做错了什么?

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

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

%# A simple example
A = cell(2, 2);
B = {'hello', 'world'};
A(1, :) = B;
在代码中,您需要将最后一行更改为:

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

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

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

C = mat2cell(resultStack.('f'), ones(stacksize,1), ones(1,4)) 
这意味着:您指定输出单元格
C
的每一行应包含
resultStack.f
的下一行和一列(这是所有这些1后面的原因)

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

因此,代码的完整、更正版本应为:

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:如果我在编程过程中学到了一件事,那就是测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,再测试:)这里合适的元是什么?我应该删除我的答案,还是将其与我目前加入的更新一起保留,将OP指向你的答案?@ColinTBowers:不,我会保留它。像你这样的答案对于过路人了解获得公认答案的过程仍然非常有用。不知道官方对此有何看法。。。