【问题标题】:Matlab: How to plot data from n number of structuresMatlab:如何从 n 个结构中绘制数据
【发布时间】:2015-04-28 11:00:52
【问题描述】:

我正在研究具有以下结构的 matlab 脚本:Parameters1、Parameters2、Parameters3 等,直到 ParametersN。我想访问每个结构中的两个字段(例如 x 和 y),以便绘制数据。我想覆盖每个参数的 x 和 y 数据。

我目前的问题是我不知道如何访问 x 和 y 字段。我可以使用 strcat 获取名称“Parameters1”、“Parameters2”等,但不知道如何使用字符串来访问该字段。我曾尝试使用 whos('Parameters*') 来获取结构名称,但还有其他问题。

text='Parameters'
for z=1:n
    S(z)=strcat(text,num2str(z))
    x=S{z}.MDT{iDLC}.Time                % problematic line
    y=S{z}.MDT{iDLC}.RotorSpeed          % problematic line
end

谢谢 =)

【问题讨论】:

  • 我不能再强调应该避免像Parameters1 这样的结构,而应该使用Parameters(1)!正如在这个问题中看到的那样,如果您通过在变量名中添加枚举来滥用变量名,那么简单地访问您的数据已经变得很痛苦。

标签: matlab dynamic structure field


【解决方案1】:

是获取字段名还是访问字段有问题?

eval 命令可用于访问字段,以下将执行eval('Parameters1.Time')

eval([strcat(text, num2str(z)) '.Time'])

参数最好是数组,例如

Parameters(1) = struct("x", 1, "y", 2);
Parameters(2) = struct("x", 2, "y", 4);

然后你会发现你不需要strcat,而是可以访问Parameters(z)。

【讨论】:

  • 我同意。我尝试了Parameters1.('x'),它可以工作,但在使用strcat 制作Parameters1 时无法正常工作。我正在使用 Octave,所以 Matlab 可能已经工作了。所以我求助于eval
  • 大多数人投票赞成给定的建议:我不能强调应该避免使用像 Parameters1 这样的结构,而应该使用 Parameters(1)!正如在这个问题中看到的那样,如果您通过在变量名中添加枚举来滥用变量名,那么简单地访问您的数据已经变得很痛苦。
  • 在我的脚本开始时,我从模拟中加载所有数据。模拟数据存储在一个名为参数的结构中,为了区分模拟,我将它们重命名为参数 1、2、3 等……我知道这是一种非常丑陋的方法!不过,我不知道您可以使用一系列结构-我已经重新设计了一些东西,而且要容易得多。谢谢,你们太棒了!!
【解决方案2】:

您尝试过getfieldfieldnames。试试

help getfield

help fieldnames

【讨论】:

    【解决方案3】:

    你的代码应该是这样的:

    hold all
    for t=1:numel(Parameters)
        plot(Parameters(t).x,Parameters(t).y)
    end
    

    请注意,这意味着您使用Parameters(t) 而不是Parameterst,这大大简化了事情并提高了效率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多