![]() |
如何在MATLAB中将变量移入和移出类似于LOAD和SAVE的结构?
有没有一种快速的方法(即一行)来使用变量名作为结构字段来转储“在”结构中的变量集合? “加载”功能基本上可以做到这一点,但是保存并加载到临时文件似乎很丑陋。
例如: clear a = 'adsf' b = rand(10); x = var2struct(a,b) xa xb 或更好: x = var2struct(['a';'b']) 另外,相反(将字段值作为以字段命名的变量转储到当前作用域中)怎么办?: clear xa='asdf' xb=rand(10); dumpstruct(x) a b 另外,这是一个相关的[URL="http://www.mathworks.cn/matlabcentral/newsreader/view_thread/289189"]新闻组线程[/URL] 。 [B]回答:[/B] 除了使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/load.html"]LOAD[/URL]和[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/save.html"]SAVE[/URL]之外,我没有已知的内置函数可以执行此操作。但是,您可以仅创建自己的函数,如下所示: 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 ab struct2var(x); [B]几个注意事项:[/B] [LIST][*]如果您希望将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));[/LIST] [url=https://stackoverflow.com/questions/3470654]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 14:17。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.