好的,所以我找到了一种更好的方式来访问我的文件,但我仍然有点卡住了。
到目前为止我的代码:
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 - 文件如图所示(左侧可以看到文件列表): 单击每个单元格将我带到一个结构: 每个都包含我想要访问的数据。
我不确定如何编写代码,以便将最后一部分的数据存储到两个数组(波长和强度)
答案 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)
其中x
和y
是矩阵中用于存储为结构中字段的索引。
如果要连接每个矩阵以便获得21个单元格,每个单元格都有一个mx2矩阵,则可以修改循环:
for k = 1:numfiles
tmp = load(obsdata(k).name);
data{k} = vertcat(tmp{:});
end
有关如何构建数据的更多信息,我们可以优化答案。