【问题标题】:Matlab accessing structuresMatlab 访问结构
【发布时间】:2018-12-03 08:55:29
【问题描述】:

我正在尝试访问存储在 matlab 结构中的数据。有很多文件我试图使过程自动化,但是我在使用结构名称访问结构时遇到问题(假设它是一个字符串)。此外,将结构存储在变量中(如下所示)也不起作用,因为 matlab 将整个结构附加到变量。有人知道如何做到这一点吗?

%Initialize variables
Data_Struct = load(dirData(1).name);
file_id = fieldnames(Data_Struct);
data = Data_Struct.Trajectories;

这里是包含数据的结构的屏幕截图

【问题讨论】:

  • 你能上传一个测试用例,或者数据在结构中如何组织的截图吗?
  • 当然,我刚刚编辑了问题
  • 轨迹里面有什么?如果另一个结构名为“Labeled”,那么这里面是什么?
  • 是的,在Trajectories里面,还有一个叫做Labelled的结构,然后是一个数据矩阵
  • data = Data_Struct.Trajectories.Labelled.(数据矩阵的名称)这会将数据矩阵作为变量提供。

标签: matlab indexing struct


【解决方案1】:

文件名每次都在变化,因此您需要在加载新结构时正确获取它。

Data_Struct = load(dirData(1).name);

在这一行之后,

name = fieldnames(Data_Struct);

这将为您提供文件的唯一名称。最后,

data = Data_Struct.(name{1}).Trajectories.Labelled.(name of the data matrix)

【讨论】:

    【解决方案2】:

    这里的诀窍是利用这样一个事实,即您可以通过名称字符串访问结构字段:

    name = 'Trajectories'
    value = Data_Struct.(name)
    

    因此,在您的情况下,要将展开的值作为 Cell Array 获取,您可以使用:

    %%Little example copying some of your structure
    Data_Struct.Trajectories.Labelled = zeros(10);
    Data_Struct.Analog = zeros(10);
    Data_Struct.FrameRate = 300;
    
    [UnrolledCell] = getUnrolledVal(Data_Struct,[]);
    display(UnrolledCell)
    

    UnrolledCell =

    3×2 元胞数组

    'Labelled'     [10×10 double]
    'FrameRate'    [         300]
    'Analog'       [10×10 double]
    

    这里的 getUnrolledVal 函数很简单:

    function [UnrolledCell] = getUnrolledVal(struct_in,UnrolledCell)
    fields_list = fieldnames(struct_in);
    for i=1:length(fields_list)
        field = fields_list{i};
        if isstruct(struct_in.(field))
            UnrolledCell = getUnrolledVal(struct_in.(field),UnrolledCell);
        else
            UnrolledCell = [UnrolledCell; {field} {struct_in.(field)}];
        end
    end
    
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 2017-07-04
      • 1970-01-01
      相关资源
      最近更新 更多