【发布时间】:2016-08-30 22:41:57
【问题描述】:
我有一个大元胞数组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 转换为单元格。
有没有办法做到这一点? (我知道一种不太优雅的方法可能可行,即分别将每个值分配给单元格,但我不想这样做)。
【问题讨论】:
-
你可能只想要这个
A(a,:,c) = {B(:)}。但是,您调用Calculate_row的方式(如果您确实是这样称呼它的话)是非常糟糕的做法。永远不要从另一个脚本调用脚本,确保你只调用函数。将Calculate_row改编为可能类似于B = Calculate_row(input1, input2,...)的函数 -
你错过了什么吗?您在循环中分配它,但您没有使用
i作为分配中某处的索引 - 此外,A有 4 个维度,但您在分配中只给出 3 个维度。你想这样做A{a,:,c,i} = B(:)吗? (只是猜测)。请给第 4 个维度的值并再次尝试分配:-) -
也看看这里:de.mathworks.com/help/matlab/matlab_prog/… -> 根据您的数据,您甚至可能不需要 Cells,我不知道。但如果不需要,那就不要使用它,因为它会使事情变得更加复杂:-)
-
这里也很好地解释了:stackoverflow.com/a/9055336/701049 :-)