0

我想存储一个在 for 循环的每次迭代中改变其大小的数组。例如,

for y=1:100
    for x=1:50
.
.
        ms(:,x,y) = ans;
.
.
    end 
end

“ans”是一个行向量,它在 y 的每次迭代中改变其大小。

如何将这些可变长度“ans”存储到 ms 中?

当我尝试将“ms”初始化为单元格时,它会显示一条错误消息,提示“无法从 double 转换为单元格”。

我有什么方法可以解决这个问题?

谢谢亲切的问候

4

2 回答 2

1

一种方法:

ms = {};
for y=1:100
    for x=1:50
       ms = [ms 1:x];
       % or
       % ms = [ms new_cell_element];
    end 
end

您还可以索引单元格数组,不需要ms{x,y} = 1:3; new_cell_element是单元格,它可以是您想要的任何内容。

ms = [ms, 'A string', (1:5).'] %// Works! 

请注意,我不推荐这样做,而且我很确定还有其他方法可以做到这一点,具体取决于您想要在这些嵌套循环中执行的操作。您应该检查一下cellfun,然后cells大体上阅读。

此外,永远不要ans在 MATLAB 中用作变量名。那只会给你带来麻烦。任何其他名称都更好clearand除外builtin

于 2014-10-08T17:03:15.247 回答
1

我能想到的唯一方法是确实使用单元阵列。像这样初始化一个二维元胞数组:

ms = cell(50,100);

之后,您使用花括号 ( {}) 对单元格进行索引。因此,您的循环将如下所示:

for y=1:100
    for x=1:50
.
.
        ms{x,y} = ans;
.
.
    end 
end

完成后,您可以通过选择所需的行和列位置来索引元胞数组:

vec = ms{row,col};

顺便说一句,我不建议您将ans其用作变量。 ans是当您在 MATLAB 中执行具有输出的语句时使用的默认变量,并且您没有指定函数的此输出将去往何处的变量。您可能有会覆盖该ans变量的代码,因此您或许应该使用另一个名称。

于 2014-10-08T17:03:46.377 回答