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 文件中的主要内容,如果未能解决你的问题,请参考以下文章