Matlab循环将行分配给元胞数组

Matlab loop to assign rows to cell array

我有一个大元胞数组 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(:),我会收到以下错误:

Expected one output from a curly brace or dot indexing expression, but there were b results.

如果我尝试 A(a,:,c) = B(:) 我会收到以下错误:

Conversion to cell from double is not possible.

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

一种方法是制作 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 and also this answer 了解更多信息。

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

A(a,:,c) = B(:) 的问题在于,使用 () returns 对元胞数组进行索引时,您不能只分配一个矩阵(即 B(:))到单元格数组,因此你第二个错误。