以嵌套结构访问数据

时间:2014-12-15 04:48:35

标签: arrays matlab structure

好的,所以我找到了一种更好的方式来访问我的文件,但我仍然有点卡住了。

到目前为止我的代码:

clc % clear window
clear %clear workspace

numfiles = 21;
data = cell(1, numfiles);

obsdata = dir('*.mat'); 
numfiles = length(obsdata);
data = cell(1, numfiles);

for k = 1:numfiles 
  data{k} = load(obsdata(k).name); 
end

这会排除我的数据。 有21个单元格包含J6 - 文件如图所示(左侧可以看到文件列表): Files 单击每个单元格将我带到一个结构: Structure 每个都包含我想要访问的数据。

我不确定如何编写代码,以便将最后一部分的数据存储到两个数组(波长和强度)

2 个答案:

答案 0 :(得分:0)

试试这个。我使用deal将每个obsdata.name复制到名为names的单元格数组中。 (这可能是变量名称的不良选择,因为你已经有一个名为name,但无论如何......)

obsdata = dir('*.mat'); 
numfiles = length(obsdata);
data = cell(1, numfiles);
names = cell(1,numfiles);
names = cell(1,numfiles);
[names{:}] = deal(obsdata.name);
for k = 1:numfiles
  data{k} = load(names{k}) 
end

答案 1 :(得分:0)

它可以帮助您更多地了解您希望如何存储数据,但通常工作将在您用于加载文件的循环内完成。一个好的起点可能是从结构体和单元格数组中获取数据:

for k = 1:numfiles 
  data{k} = struct2cell(load(obsdata(k).name)); 
end

我相信(已经有一段时间了,我再也无法访问matlab了)21个单元格中的每个单元格现在都包含一个单元格数组,存储您感兴趣的矩阵在。也许这就足够了?从这一点来看,我认为你可以访问这样的数据:

data{file_num}{struct_field_num}(x,y)

其中xy是矩阵中用于存储为结构中字段的索引。

如果要连接每个矩阵以便获得21个单元格,每个单元格都有一个mx2矩阵,则可以修改循环:

for k = 1:numfiles 
  tmp = load(obsdata(k).name); 
  data{k} = vertcat(tmp{:});
end

有关如何构建数据的更多信息,我们可以优化答案。