mat*_*ick 9 variables matlab structure save matlab-load
是否有一种快速的方法(即一行)将一组变量转储到一个结构中,使用变量名称作为结构字段?"加载"功能基本上可以做到这一点,但保存和加载到临时文件似乎很难看.
例如:
clear
a = 'adsf'
b = rand(10);
x = var2struct(a,b)
x.a
x.b
Run Code Online (Sandbox Code Playgroud)
或者更好的是:
x = var2struct(['a';'b'])
Run Code Online (Sandbox Code Playgroud)
另外,反过来(即将字段值作为字段命名的变量转储到当前作用域)?
clear
x.a='asdf'
x.b=rand(10);
dumpstruct(x)
a
b
Run Code Online (Sandbox Code Playgroud)
另外,这是一个相关的新闻组主题.
gno*_*ice 18
除了使用LOAD和SAVE之外,我还没有内置函数可以做到这一点.但是,您可以创建自己的函数,如下所示:
function s = var2struct(varargin)
names = arrayfun(@inputname,1:nargin,'UniformOutput',false);
s = cell2struct(varargin,names,2);
end
function struct2var(s)
cellfun(@(n,v) assignin('base',n,v),fieldnames(s),struct2cell(s));
end
Run Code Online (Sandbox Code Playgroud)
在基础工作区中工作,您可以使用以下函数:
a = 'adsf'
b = rand(10);
x = var2struct(a,b);
clear a b
struct2var(x);
Run Code Online (Sandbox Code Playgroud)
几个笔记:
如果您希望将参数指定var2struct
为变量名而不是变量本身,则可以使用以下替代函数:
function s = var2struct(varargin)
values = cellfun(@(n) evalin('base',n),varargin,'UniformOutput',false);
s = cell2struct(values,varargin,2);
end
Run Code Online (Sandbox Code Playgroud)
您可以在基础工作区中使用它,如下所示:
x = var2struct('a','b');
Run Code Online (Sandbox Code Playgroud)
不幸的是,您只能使用此版本的函数从基础工作区获取变量,而不是函数的工作空间.
struct2var
上面这个函数的一个警告是,它总是在基本工作空间中创建变量,而不是函数调用的工作空间struct2var
.要在基础以外的工作空间中创建变量,您必须在该工作空间中使用此行而不是调用struct2var
:
cellfun(@(n,v) assignin('caller',n,v),fieldnames(x),struct2cell(x));
Run Code Online (Sandbox Code Playgroud)