我写了一个简单的函数来自动保存一些名称为
的变量function savevariables(varargin)
%1st argument varible1, 2nd argument 'namevar1', 3rd variable2, 4th 'namevar2', etc
for i = 1:2: length(varargin)
savedata = varargin{1,i};
namedata=genvarname(varargin{i+1});
save(strcat('/home/.../path/',namedata),'savedata')
clear savedata
clear namedata
end
end
问题是当我在工作区中再次加载变量时,他们的名字被保存为...我希望他们有原来的名字..
假设我有2个载体
Test1 = [1 2 3 4 5];
Test2 = [4 5 6];
我调用了函数
function savevariables(Test1, 'Test1',Test2,'Test2');
我想将变量Test1保存为Test1,将Test2保存为Test2,当我在工作区中再次加载它时,我有变量Test1和Test2 ..
答案 0 :(得分:4)
有一些很好的辅助函数可以帮助你。
特别是:inputname
将提取变量名称,因此您无需再次指定它。
并且evalin
将在父工作区中执行 - 因此您无需重新分配变量。
genvarname
不应该是必要的,因为无论如何你需要提供一个有效的变量名。
让我给你举个例子:
function savevariables(varargin)
for i=1:numel(varargin)
str = sprintf('save %s %s',inputname(i),inputname(i));
evalin('caller',str)
end
使用示例:
my_sample = rand(10);
savevariables(my_sample)
现在应该有一个文件my_sample.mat
,其中包含一个10x10的随机数矩阵。您可以拨打clear
,然后拨打load my_sample
。然后,如果你打电话给whos
,你应该得到以下输出:
Name Size Bytes Class Attributes
my_sample 10x10 800 double
或者您在问题中提供的样本的调用将是:
savevariables(Test1,Test2)
答案 1 :(得分:1)
你可以用eval
做到这一点,这绝不是最好的选择,但我看不到解决方法。我确定有一个。但这应该有用。
function savevariables(varargin)
%1st argument varible1, 2nd argument 'namevar1', 3rd variable2, 4th 'namevar2', etc
for i = 1:2: length(varargin)
namedata=genvarname(varargin{i+1});
filename = strcat('/home/.../path/',namedata);
eval([namedata, ' = varargin{1,i};']);
save(filename, namedata)
clear savedata
clear namedata
end
end
请致电如下:
savevariables(Test1, 'Test1', Test2, 'Test2')
然后,当您load test1
时,您将在工作区中获得一个名为Test1
的变量
答案 2 :(得分:1)
您可以使用-struct
功能的save
选项。然后,您可以将some_struct.foo
保存为单个变量foo
。
function savevariables(varargin)
% swap varargin(2 * k) and varargin(2 * k + 1) to use struct()
varargin = flipud(reshape(varargin, 2, []));
varargin(1,:) = genvarname(varargin(1,:));
s = struct(varargin{:});
for varname = fieldnames(s).'
save(['/home/.../path/' varname{1}], '-struct', 's', varname{1});
end
end
如果您运行savevariables(1, 'a', 2, 'b', 3, 'c', 4, 'd', 5, 'd', 6, 'd');
,您将获得六个文件a.mat
,b.mat
,c.mat
,d.mat
,d1.mat
和{{1 }}