在不保存或删除图形的情况下保存Matlab工作区

7
保存命令save的文档称,如果您不想使*.mat文件过于繁重,则应删除图形。我定期将内容save*.mat文件中,并在发出clf后重新使用图形。我宁愿不必删除它就能save一个*.mat文件,然后打开一个新的图形。有办法做到这一点吗?

你是明确保存所需变量吗?还是把所有东西都保存在你的工作空间中? - Suever
将所有内容保存在工作区中。感谢您的代码!它排除了图形作为大型 *.mat 文件大小的原因。 - user36800
请参考 https://dev59.com/g6Tia4cB1Zd3GeqP9CTP 获取类似的答案。 - Carl Witthoft
1个回答

10

如果你知道想要保存哪些变量,可以在调用save时显式地保存。

save('output.mat', 'variable1', 'variable2', 'variable3');

或者,如果您想保存工作区中不是图形句柄的所有变量,可以尝试以下操作:

% Get a list of all variables
allvars = whos;

% Identify the variables that ARE NOT graphics handles. This uses a regular
% expression on the class of each variable to check if it's a graphics object
tosave = cellfun(@isempty, regexp({allvars.class}, '^matlab\.(ui|graphics)\.'));

% Pass these variable names to save
save('output.mat', allvars(tosave).name)

这将不保存任何图形(或任何图形对象),同时也允许您保持它们处于打开状态。

1
谢谢你,Suever!在所有这些编码中,真的应该有一个标准选项来排除保存中的图形。幸运的是,通过使用您的代码,我的 *.mat 文件只是略微变小,所以我可以放弃额外的代码来排除图形。但是能够排除这种情况还是很好的。 - user36800
1
@user36800 一般来说,当您拥有图形句柄变量时保存所有内容是一个不好的主意,因为当您再次加载该文件时,所有图形都将被重新创建。即使您已经打开了一个图形,load 命令也会打开另一个图形。 - Suever
1
如果你想诊断*.mat文件中的大对象,可以使用whos命令的输出来检查每个变量的大小。 - Suever
2
哇,谁会想到古老的whos命令如此有用。罪魁祸首正如我所担心的——我的关键对象状态历史记录。没有绕过这个问题。至于保存所有内容,我没有存储图形句柄的变量。但是我明白你的意思。我将注意这一点,并谢谢你。 - user36800
1
我尝试了给出的命令,除了没有分号,发现我的变量在“tosave”列表中没有被否定。我查看了“allvars”变量的内容,并意识到所有的图形句柄都是结构体中的字段,就像@CarlWitthoft一样。我很匆忙,所以我将省略所有的结构体 - tosave = cellfun(@isempty, regexp({allvars.class}, 'struct'))。如果我需要保存一些结构体,它们要少得多,我可以将它们单独保存在另一个MAT文件中。 - undefined
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接