如何存储可变长度数组?

时间:2014-10-08 16:57:45

标签: matlab cell-array variable-length-array

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

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

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

如何将这些可变长度'ans'存储到ms?

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

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

由于 亲切的问候

2 个答案:

答案 0 :(得分: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

此外,永远不会在MATLAB中使用ans作为变量名。这只会给你带来麻烦。任何其他名称都更好(except clear and builtin)

答案 1 :(得分:1)

我能想到的唯一方法就是确实使用单元格数组。像这样初始化2D单元格数组:

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变量的代码,因此您可能应该使用其他名称。