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