【问题标题】:Matlab loop to assign rows to cell arrayMatlab循环将行分配给单元格数组
【发布时间】: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 :-)

标签: arrays matlab row cell


【解决方案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 Dealthis answer 了解更多信息。

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

A(a,:,c) = B(:) 的问题在于,使用() 索引元胞数组会返回一个元胞数组,并且您不能只将矩阵(即B(:))分配给元胞数组,因此会出现第二个错误。

【讨论】:

  • 谢谢丹,我按照你的建议做了,但这样我仍然收到错误。当我键入 [A({1,:,1,1}] = B_Cell{:} 时,我收到错误 [A({1,:,1,1}] = B_Cell{:} ↑ 错误:意外的 MATLAB 运算符。箭头指向“:”。
  • 天哪,我没有看到它,我很抱歉,现在它可以工作了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多