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

Arrays Matlab循环将行分配给单元数组,arrays,matlab,row,cell,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=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(:)
我会收到以下错误:

无法从双精度转换为单元格


有办法做到这一点吗?(我知道一种不太优雅的方法可能是将每个值分别分配给单元格,但我不希望这样做)。

一种方法是将
B
制作成单元格数组,然后利用:

请阅读Loren Shure的文章,了解更多信息

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


A(A,:,c)=B(:)
的问题是,用
()
索引单元格数组会返回一个单元格数组,而您不能将矩阵(即
B(:)
)分配给单元格数组,因此会出现第二个错误。

您可能只需要这个
A(A,:,c)={B(:)
。然而,您调用
计算行
的方式(如果确实是这样调用的话)是非常糟糕的做法。不要从另一个脚本调用脚本,确保只调用函数。将
Calculate\u row
调整为一个类似于
B=Calculate\u row(input1,input2,…)
的函数,您是否遗漏了什么?您在一个循环中分配它,但您没有在分配的某处使用
i
作为索引-此外
a
有4个维度,但您在分配中只给出3个维度。你想这样做吗
A{A,:,c,i}=B(:)
?(只是猜测而已)。请为第四维指定一个值,然后再次尝试赋值:-)也请查看此处:->根据您的数据,您甚至可能不需要单元格,我不知道。但是,如果不是必需的,那么就不要使用它,因为它会使事情变得更复杂:-)这里也很好地解释了:-)谢谢你,丹,我按照你的建议做了,但是这样我仍然会收到一个错误。当我键入[A({1,:,1,1}]=B_单元{:}时,我收到错误[A({1,:,1,1}]=B_单元{:}↑ 错误:意外的MATLAB运算符。箭头指向“:”。哦,上帝,我没有看到它,我道歉,现在它工作了。谢谢
B_cell = num2cell(B);
[A{a,:,c}] = B_cell{:}    %// or [A{a,:,c,i}] = B_cell{:} if tim's comment is correct