MATLAB-将工作区变量单独保存到许多单独的 .mat 文件中

Posted

技术标签:

【中文标题】MATLAB-将工作区变量单独保存到许多单独的 .mat 文件中【英文标题】:MATLAB- Individually Saving Workspace Variables into Many Individual .mat Files 【发布时间】:2015-07-14 19:24:01 【问题描述】:

所以我在 MATLAB 工作区中有许多文件都采用相同的格式,

“project1day1”、“project1day2”等,而不是将它们都放在同一个工作区中,我想将它们保存为各自的同名 .mat 文件。

所以,我希望工作区中的“project1day1”变量转到“project1day1.mat”文件。

我有 7 个项目,除项目 1 之外的所有项目都有 3 个“天”。我在执行确切的语法时遇到了麻烦。我想以一般方式遍历我的工作区数据。我想按照以下方式执行一些操作:

maxdays=3;
maxprojects=7;

for i = 1:maxprojects;
  for j = 1:maxdays;

     save('project%dday%d','project%dday%d,i,j,i,j)

  end
end

两件事:

1) 保存选项不起作用

2) 对于没有第 3 天的情况,我需要包含某种 ~if(exist '...') ,但我在这样做时遇到了麻烦。

【问题讨论】:

我建议不要拥有许多 MAT 文件......相反,拥有一个包含所有这些变量的 MAT 文件。拥有太多 MAT 文件会使事情变得难以管理。如果您对此感兴趣,我会写一个答案。 【参考方案1】:

正如 rayryeng 所写,我认为在大多数情况下,最好将变量保存在一个文件中,或者(你写它们都采用相同的格式)使用结构或元胞数组,这样会更容易以便以后访问它们。

如果您确实需要将工作区中的所有变量保存到单独的文件中,您可以执行以下操作:

vars = who;

for i=1:length(vars)
    save([varsi '.mat'], varsi);
end

但是,如果不是(出于某种原因)绝对必要,我不会这样做!

【讨论】:

尽量避免使用eval。你可以只做save([varsi '.mat'], varsi); 使用eval 被认为是不好的做法。如果您有时间,请阅读来自 MathWorks 的 Loren Shure 的这篇内容丰富的文章:blogs.mathworks.com/loren/2005/12/28/evading-eval 我知道,出于某种原因,我认为 MATLAB 需要在变量名周围加上引号...编辑它,谢谢 提示:您可以使用regexp 过滤掉不需要的变量。只需将第一行替换为:vars = regexp(strjoin(who.'), 'project\d+day\d+', 'match'); 对于大多数用途来说,who('project*') 这样的通配符表达式就足够了

以上是关于MATLAB-将工作区变量单独保存到许多单独的 .mat 文件中的主要内容,如果未能解决你的问题,请参考以下文章

matlab,简述脚本M文件和函数M文件的区别?

获取 CSV 文件并按天将其保存到单独的 MATLAB 文件中

matlab 多个矩阵保存问题

matlab,简述脚本M文件和函数M文件的区别?

Excel VBA将单元格数据保存到单独的工作表

用 Matlab 保存 Excel 数据