Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在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 另外,这是一个相关的新闻组线程



回答:

除了使用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 ab 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));

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 21:15


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.