Matlab循环将行分配给单元格数组

时间:2016-05-05 08:09:54

标签: arrays matlab row cell

我有一个大的单元格数组A=cell(a,b,c,d)和一个尺寸为B的行向量1 - by - b

我想在MATLAB中构建一个循环来执行以下操作:

for i=1:n
   B = Calculate_row(input1,input2) %this is a function that creates my B row
   A{a,:,c,i} =  B(:)
end

无论如何,如果我尝试A{a,:,c} = B(:),我会收到以下错误:

  

预计一个大括号或点索引表达式的输出,但有b个结果。

如果我尝试A(a,:,c) = B(:),我会收到以下错误:

  

无法从double转换为单元格。

有办法做到这一点吗? (我知道一种不那么优雅的方式可能会将每个值分别分配给单元格,但我宁愿不这样做。)

1 个答案:

答案 0 :(得分:1)

实现此目的的一种方法是使B成为一个单元格数组,然后利用comma-separated-lists

B_cell = num2cell(B);
[A{a,:,c}] = B_cell{:}    %// or [A{a,:,c,i}] = B_cell{:} if tim's comment is correct

请查看Loren Shure的文章Deal or No Deal以及this answer了解更多信息。

语法问题A{a,:,c} = B(:)是RHS(即B(:))只是一个单一矩阵,而LHS是b结果的逗号分隔列表。因此,您基本上要求将1输出分配给b个变量,而MATLAB不会这样,因此也会出现错误信息。

A(a,:,c) = B(:)的问题是使用()索引单元格数组会返回一个单元格数组,而您只能将矩阵(即B(:))指定给单元格数组因此你第二个错误。