我想存储一个在for循环的每次迭代中改变其大小的数组。 例如,
for y=1:100
for x=1:50
.
.
ms(:,x,y) = ans;
.
.
end
end
'ans'是一个行向量,它在y的每次迭代中改变其大小。
如何将这些可变长度'ans'存储到ms?
当我尝试将'ms'初始化为单元格时,它会显示一条错误消息“无法从double转换为单元格”。
我有什么方法可以解决这个问题?
由于 亲切的问候
答案 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
变量的代码,因此您可能应该使用其他名称。