我有一个数据集,它包含大约 1000 个 150 万行文件,每个文件有 6 列。这些文件来自大约 50 个气象站。理论上,所有电台都是时间同步的。我已将来自 50 个站点中的每个站点的数据存储在 Matlab 中的单元阵列中。每个站都有一个与文件对应的元胞数组的元胞数组。也就是说,Station 1 在元胞数组#1 中,元胞数组#1 具有与文件数量对应的 X 个元胞数组。然后每个都包含实际数据。我想将所有数据放到一个位置,第一列是“时间”,其他 50 列是站。我不需要 6 列中的所有数据。然而。我的策略是创建一个单元格数组,其中包含所有可能时间的列,后跟 50 个空列,数据将被放入其中。然后我查看每个文件,
我进行转换的代码如下所示:
% One-second time data in datenum format
times = datenum(2011,11,20,0,0,0:TotalSeconds)';
% The number of files associated with each station
AllLengths = cellfun(@length,TotalData);
% Preallocating irradiance cell array
IrradianceData = cell(length(times),length(AllLengths)+1);
% Loop through the times (November 20, 2011, 00:00:00 to present) and find common times from the data
for ii = 1:length(AllLengths)
for jj = 1:AllLengths(ii)
% This finds the indices of the times within the station file
[~,IdxData,Idxtimes] = intersect(TotalData{ii,1}{jj,1}(:,1),times);
% This adds the irradiance values to another cell array
% Can I do this more efficiently?
for kk = 1:length(Idxtimes)
IrradianceData{Idxtimes(kk),ii+1} = TotalData{ii,1}{jj,1}(IdxData(kk),5);
end
end
end
有什么方法可以搜索数据文件,并以矢量化方式将相关数据添加到元胞数组中?它现在的设置方式非常缓慢。我会很感激任何建议。