【问题标题】:How to load variables from struct into Matlab workspace?如何将结构中的变量加载到 Matlab 工作区?
【发布时间】:2015-04-30 03:12:00
【问题描述】:

假设我可以访问使用load 函数创建的结构:

structWithVariables = load('data.mat');

我想将此结构中的所有变量加载到工作区中,但是如果不对所有变量的名称进行硬编码,我找不到任何方法。

注意:我无权访问 .mat 文件,也无权加载结构体的代码,我真的只有结构体。

注意 2:我想这样做的原因只是为了使用一些引用变量的代码,就好像它们在工作区中一样。我不想更改代码。

【问题讨论】:

  • 我在论坛上看到有人说你可以使用 EVAL 做到这一点,但我不知道如何。
  • stackoverflow.com/questions/1823668/…。编写一个小函数,使用 fieldnamesassignin 将它们分配到您的工作区。
  • 很高兴知道,但也很遗憾 Matlab 不支持这个!
  • 仅供参考,现在 Mathworks 不鼓励使用 eval 来支持动态字段名(如 Andrew 的回答中所使用的)blogs.mathworks.com/loren/2005/12/13/…

标签: matlab


【解决方案1】:

是的。使用fieldnames 以编程方式获取变量名称,并使用assignin 将它们粘贴到您的工作区中。

function struct2vars(s)
%STRUCT2VARS Extract values from struct fields to workspace variables
names = fieldnames(s);
for i = 1:numel(names)
    assignin('caller', names{i}, s.(names{i}));
end

将该函数调用为struct2vars(structWithVariables),现在它们将作为变量填充到您的工作区中。

尽管如果您可以访问要调用的代码,重写它以将变量作为函数参数而不是查看当前工作区可能会更简洁。

【讨论】:

    【解决方案2】:

    这是一个使用 cellfun 的单行代码:

    myvar=structWithVariables; %for readability of code =)
    
    cellfun(@(x,y) assignin('base',x,y),fieldnames(myvar),struct2cell(myvar));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 2018-01-23
      • 1970-01-01
      相关资源
      最近更新 更多