Matlab - 将来自循环的数据存储在矩阵(不是向量)中

Matlab - storing data from a loop in a Matrix (not a vector)

作为更大脚本的一部分,我想将来自 while 循环的数据存储在矩阵中。我想在新矩阵中保存 1738x3 的 COG_Ton_Av 矩阵的一部分。 COG_Ton_Av 在每个循环中都会发生变化,所以我想将结果存储在外部。我找到了多个关于如何将数据存储在向量中的条目,但没有找到关于矩阵的条目。我试过的是:

valuesforts= zeros(1000,3);
yr =1
while Qn>0 
yindex = Gmhk*100 
zindex = round(gs*100) 
ts = (COG_Ton_Av ((zindex:yindex),:))
valuesforts(yr)=ts
yr = yr+1
end 

我只是贴出了 while 循环的一部分以使问题更简单,我希望它足以回答问题。 尝试此操作时出现以下错误:

下标赋值维度不匹配。

cutoff_work14_priceescalation_and_stockpiling 中的错误(第 286 行) 值(年)=ts

该错误意味着 ts 与 valuesforts 的大小不同(并且它以 yr 作为向量进行索引。

如果 TS 的维度在循环的每次迭代中都不同,则使用单元格表示法:

valuesforts = cell(<number of years>);
...
valuesforts{yr} = ts; 

那么 ts 的维度就无关紧要了。

要提取数据也可以使用 { },例如

meanValues(yr) = mean(valuesforts{yr});

请记住,valuesforts 的每个单元格内的矩阵在分配时将具有与 ts 相同的膨胀。

或者,如果 TS 的大小始终相同,则预分配 valuesforts 为:

valuesforts = zeros(<number of years>,<expected length of ts>,3);
...
valuesforts(yr,:,:) = ts;

然后取决于你想用 valuesforts 做什么..重塑它或绘制它。

在最坏的情况下(不推荐),您可以让 valuesforts 随着每次循环迭代而增长。 初始化为空:

valuesforts=[];

然后将 ts 垂直附加到 valuesforts:

valuesforts = [valuesforts; ts];

这将为您提供一个包含 3 列和年数 * 每次循环迭代中 ts 中的行数的矩阵。