时间循环 - 将矢量数据存储在文件中而不覆盖

Posted

技术标签:

【中文标题】时间循环 - 将矢量数据存储在文件中而不覆盖【英文标题】:Time loop - store vector data in a file without overwriting 【发布时间】:2014-02-25 00:22:37 【问题描述】:

在我的 MATLAB 代码中,我想保存所有向量的迭代数据,其中一个在每个时间步循环中重新计算(取决于时间)。我很困惑试图找到最好的方法来做到这一点。我试图保存在一个 mat 文件中,但我只得到最后一个值。我必须制作一个矩阵吗?并将我的向量(1 行 100 列)保存到每一行?那么,我必须在这个矩阵中拥有最大的行时间步长吗?有没有其他解决方案?

【问题讨论】:

一些示例代码或您目前所做的将会很有用。 您可能正在寻找 save('myfile.mat', 'myvec', '-append');,但正如 Marcin 所说,发布一些代码会更容易回答您的问题。 我试图发布我的代码示例,但我不能。 -append 解决方案不起作用。我的向量在每个循环中都会重新定义。我需要可能创建一个新矩阵,其中它的原始值将是每个时间步的值。我不知道该怎么做。 我的回答有用吗? 【参考方案1】:

mat 文件不能包含两个同名的变量。您需要为每次迭代中保存的变量指定一个新名称,否则它只会覆盖 mat 文件中的同名变量。

最简单的方法是使用 MATLAB 结构体的动态字段名语法,使用名称中的迭代索引在结构体中创建一个新字段。然后可以使用save-struct 选项将该字段直接保存到mat 文件中(没有父结构)。

for a = 1:100
   A = rand(10);                 % Compute output to be saved here
   s.(sprintf('iter%d', a)) = A; % Save it to a new variable in a structure
   save('myfile.mat', '-struct', 's', '-append'); % Append to your mat file
   clear s                       % Clear the structure
end

【讨论】:

以上是关于时间循环 - 将矢量数据存储在文件中而不覆盖的主要内容,如果未能解决你的问题,请参考以下文章

顶点动画存储在 FBX 文件中而不使用点缓存?

将数据存储在列表中而不丢失它们(C#)

如何将 API 调用返回的数据直接加载到 BigQuery 中而不存储在 GCS 中?

C# 将“X”次保存到一个 .txt 文件中而不覆盖最后一个字符串

将 XmlNodeList 加载到 XmlDocument 中而不循环?

将增量存储在数据库中而不是整个对象中