时间循环 - 将矢量数据存储在文件中而不覆盖
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
【讨论】:
以上是关于时间循环 - 将矢量数据存储在文件中而不覆盖的主要内容,如果未能解决你的问题,请参考以下文章
如何将 API 调用返回的数据直接加载到 BigQuery 中而不存储在 GCS 中?
C# 将“X”次保存到一个 .txt 文件中而不覆盖最后一个字符串