我想为matlab的save
函数编写一个包装器,其中包含预定义的选项(在我的情况下预定义version
以允许保存大文件),即类似这样的东西
save('parameters.mat', 'some', 'parameters', 'here', '-v.3');
应该变成这个
save_large('parameters.mat', 'some', 'parameters', 'here');
其中save_large
是save
的包装器,version
设置为'-v7.3'
:
function [ ] = save_large( filename, varargin )
%varargin to allow for multiple variable storing?
%what to write here to save all variables (declared as chars) stored in
%the workspace where 'save_large' was called with version set to '-v7.3'?
end
答案 0 :(得分:2)
由于变量不会存在于函数Array
(
[0] => 7814
)
的范围内,因此您必须使用save_large
从evalin
工作空间获取变量。
使用"caller"
我们还可以确保调用者工作区中的变量存在。
要在try
文件中获取正确的变量名,我们可以使用(不鼓励的).mat
函数,或者使用以下方法将所有变量分配给结构,然后使用eval
中的-struct
标记。
save
实施例
function save_large(filename, varargin)
% Set up struct for saving
savestruct = struct();
for n = 1:numel(varargin)
% Test if variable exists in caller workspace
% Do this by trying to assign to struct
% Use parentheses for creating field equal to string from varargin
try savestruct.(varargin{n}) = evalin('caller', varargin{n});
% Successful assignment to struct, no action needed
catch
warning(['Could not find variable: ', varargin{n}]);
end
end
save(filename, '-struct', 'savestruct', '-v7.3');
end