如何在MATLAB中将变量移入和移出类似于LOAD和SAVE的结构?

时间:2010-08-12 18:08:12

标签: matlab variables save structure matlab-load

使用变量名称作为结构字段,是否有快速方式(即一行)转储“结构”中的变量集合? “加载”功能基本上可以做到这一点,但保存和加载到临时文件似乎很难看。

例如:

clear
a = 'adsf'
b = rand(10);

x = var2struct(a,b)

x.a
x.b

或更好:

x = var2struct(['a';'b'])

另外,反过来(即将字段值作为字段命名的变量转储到当前作用域)?:

clear
x.a='asdf'
x.b=rand(10);
dumpstruct(x)
a
b 

此外,这是一个相关的newsgroup thread

1 个答案:

答案 0 :(得分:18)

除了使用LOADSAVE之外,我还没有内置函数来执行此操作。但是,您可以创建自己的函数,如下所示:

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

在基础工作区中工作,您可以使用以下功能:

a = 'adsf'
b = rand(10);
x = var2struct(a,b);
clear a b
struct2var(x);

有几个笔记:

  • 如果您希望将var2struct的参数指定为变量名而不是变量本身,则可以使用以下替代函数:

    function s = var2struct(varargin)
      values = cellfun(@(n) evalin('base',n),varargin,'UniformOutput',false);
      s = cell2struct(values,varargin,2);
    end
    

    您可以在基本工作区中使用它,如下所示:

    x = var2struct('a','b');
    

    不幸的是,您只能使用此版本的函数从基础工作区获取变量,而不是函数的工作区。

  • 上面提到的struct2var函数的一个警告是它总是在基础工作区中创建变量,而不是调用struct2var的函数的工作空间。要在基础以外的工作空间中创建变量,您必须在该工作空间中使用此行而不是调用struct2var

    cellfun(@(n,v) assignin('caller',n,v),fieldnames(x),struct2cell(x));