我有一个大的单元格数组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转换为单元格。
有办法做到这一点吗? (我知道一种不那么优雅的方式可能会将每个值分别分配给单元格,但我宁愿不这样做。)
答案 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(:)
)指定给单元格数组因此你第二个错误。