我试图找到Date3
中的索引,这是一个从08/01/2008到2014年1月31日的日期编号的列向量,已经多次重复,匹配day
。我基本上想把idx组织成一个像idx{i}
这样的单元格数组,其中每个单元格都是一天(所以返回Date3等于day的所有索引,其中day是01/01/2008和01之间的一天31/2014。最后,我想通过将我找到的索引应用于变量Data2
来取出每天的数据(重塑数据2,以便代替数据浓度的长列向量而不是I' ll有一个单元格数组,其中每个单元格都是一天的所有数据)
这就是我一直在做的事情:
for day = datenum(2008,01,01):1:datenum(2014,01,31); % All the days under consideration
idx = find(Date3, day); % Index of where Date3 equals the day under consideration
Data_PM25 = Data2(idx); % Pull out the data based on the idx
end
实施例:
如果Date3
看起来如下(它实际上要大得多,并且会重复多次)
733408
733409
733410
733411
733412
733413
733414
733415
733416
733417
733418
733419
733420
733421
733408
733409
733410
733411
733412
733413
733414
733415
733416
733417
733418
733419
733420
733421
我希望idx成为
`idx{1}` = (1, 15) % Where 733408 repeats
`idx{2}` = (2, 16) % Where 733409 repeats
...
然后Data2
,看起来像:
[NaN]
[NaN]
[NaN]
[NaN]
[NaN]
[NaN]
[NaN]
[NaN]
[NaN]
[NaN]
'25.8'
'26.1'
'28.9'
'37.5'
'25.2'
'20'
'32.3'
'41'
'46.7'
'28.2'
'34.5'
'31.8'
'37.6'
'45.5'
'54.9'
'54.8'
'36.3'
'18.5'
现在看起来像
'Data_PM25{1}' = ([NaN], '25.2')
'Data_PM25{2}' = ([NaN], '20')
...
当然,实际输出将比两场比赛长得多。
似乎正在发生的事情是,我将每day
与Date3
进行比较,这是一个日期列表,所以我回来了所有的日子。
此问题扩展了上一个问题:Find where a value matches and concatentate into column vector MATLAB
答案 0 :(得分:1)
使用find(ismember ...)查找某一天在Date3的长列中显示的位置,然后用它来从当天提取所有数据,Lat和Lon。
group2cell
由于某种原因,创造了应该是天数的两倍。基本上,它以某种方式退出了两年,其中第一年退出(1:365或1:366)是随机的。
day = datenum(years(y), 01, 01):datenum(years(y), 12, 31); % Create a column vector of all days in one year
for d = 1:length(day)
% Find index where Date3 matches one day, one day at a time
ind{d} = find(ismember(datenum(Date3), day(d)) == 1);
data_O3{d} = Data2(ind{d});
end
答案 1 :(得分:0)
这个怎么样:结果应该是向量的单元格数组,每个向量对应于给定日期的数据。
这当然假设Date3和Data2的大小相同
Date3=[733408
733409
733410
733411
733412
733413
733414
733415
733416
733417
733418
733419
733420
733421
733408
733409
733410
733411
733412
733413
733414
733415
733416
733417
733418
733419
733420
733421];
Data2 = Date3.*50; % //just some dummy data for testing
Data_pm25=cell(0);
for day=datenum(2008,01,01):datenum(2014,01,01)
idx=day==Date3;
Data_pm25 = [Data_pm25,Data2(idx)];
end
我能看到的唯一问题是,如果你每天都没有数据,你就不必知道每个细胞代表哪一天。通过存储带有数据的日期向量可以很容易地解决这个问题。
答案 2 :(得分:0)
正如我在您提到的其他问题中提到的,请尝试从FileExchange中获取GROUP2CELL函数。
您可以在索引上使用它
[newidx, uniqueDate] = group2cell(idx,Date2);
或直接在数据上
[Data_PM25, uniqueDate] = group2cell(Data2,Date2);
uniqueDate
将是所有唯一日期的数组。 uniqueDate(i)
将与Data_PM25(i)
对应。