【问题标题】:Matlab - storing data from a loop in a Matrix (not a vector)Matlab - 将循环中的数据存储在矩阵(不是向量)中
【发布时间】:2016-05-13 16:50:06
【问题描述】:

作为更大脚本的一部分,我想将来自 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 行) valuesforts(yr)=ts

【问题讨论】:

    标签: matlab storing-data


    【解决方案1】:

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

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

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

    那么 ts 的尺寸就无关紧要了。

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

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

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

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

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

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

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

    valuesforts=[];
    

    然后将 ts 垂直附加到 valuesforts:

    valuesforts = [valuesforts; ts];
    

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

    【讨论】:

    • 感谢您的回答,它现在可以工作,但输出在单元格内 - 我以后如何访问有用的? (基本上回到matlab矩阵?)
    • 更新了如何从单元格中提取数据的示例
    • 谢谢 :) 但有没有机会再次将其作为矩阵取出?这样我就可以继续计算了吗? ....我需要单个可用的值...但感谢您的帮助:)
    • ts的大小是多少?如果每次循环迭代都相同,则使用替代选项,其中“valuesforts(yr,:,:)”仍然是一个矩阵(严格来说它是一个数组,因为它有超过 2 个维度)。 .. 还包括另一个“丑陋”的选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2015-07-15
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多