我有以下脚本将文本文件导入matlab,其中包含每小时数据,然后我尝试将它们转换为每日平均值:
clear all
pathName = ...
TopFolder = pathName;
dirListing = dir(fullfile(TopFolder,'*.txt'));%Lists the folders in the directory specified by pathName.
for i = 1:length(dirListing);
SubFolder{i} = dirListing(i,1).name;%obtain the name of each folder in
%the specified path.
end
%import data
for i=1:length(SubFolder);
rawData1{i} = importdata(fullfile(pathName,SubFolder{i}));
end
%convert into daily averages
rawData2=cell2mat(rawData1);
%create one matrix for entire data set
altered=reshape(rawData2,24,(size(rawData2,2)*365));
%convert into daily values
altered=mean(altered)';
%take the average for each day
altered=reshape(altered,365,size(rawData2,2));
%convert back into original format
我的问题在于尝试将数据转换回与'rawData1'相同的格式,'rawData1'是每个变量的一个单元格(其中每个变量都由'SubFolder'表示。这样做的原因是除了一个之外的所有变量变量是向量,其余变量是矩阵(8760 * 11)。
因此,这方面的一个例子是:
clear all
cell_1 = rand(8760,1);
cell_2 = rand(8760,1);
cell_3 = rand(8760,1);
cell_4 = rand(8760,1);
cell_5 = rand(8760,1);
cell_6 = rand(8760,11);
cell_7 = rand(8760,1);
cell_8 = rand(8760,1);
cell_9 = rand(8760,1);
data = {cell_1,cell_2,cell_3,cell_4,cell_5,cell_6,cell_7,cell_8,cell_9};
我需要将“数据”中的每个单元格从每小时值转换为每日平均值(即365行)。
非常感谢任何建议。
答案 0 :(得分:1)
我认为这可以做你想要的。
data = cellfun(@(x) reshape(mean(reshape(x,24,[]))',365,[]),data,'uniformoutput',false);
然而,这有点令人困惑,所以我会解释一下。
mean(reshape(x,24,[]))'
内部的cellfun
部分会将数据中的每个单元格重新整形为24乘365,计算平均值,然后将其重新转换为单个列。当原始数据只有1列时,这种方法很好...但对于包含11列的cell_6,它将所有数据端到端。因此,我在reshape(...)
部分周围添加了一个mean(...)
包装,将其重新放回原来的11列......或者更精确地排列长度为365行的N列。
注意:如果X的数据集尺寸不是8760,则会出现错误。