MATLAB找到具有特定日期索引(MATLAB Find the indexes that have

2019-10-20 01:09发布

我试图寻找在指数Date3 ,日期数字的列向量从01/01/2008至2014年1月31日已经被重复了很多次,比赛day 。 我基本上要组织IDX成单元阵列像idx{i}其中每个细胞是天(所以返回的所有索引,其中DATE3等于天,其中一天是01/01/2008和1月31日之间的日子之一/ 2014,最后,我要通过施加我发现给变量的指数拉出每一天的数据Data2 (数据2整形以便代替的数据浓度的长列向量,我将有一个单元阵列,其中每个细胞是从一天的所有数据)

这是我一直在做的事情:

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')

...

当然,实际产出将不仅仅是两场比赛长得多。

这似乎虽然要发生的是,我每天都比较dayDate3 ,天名单,所以我让所有的天回。

这个问题展开过前一个问题的: 寻找到一个值匹配,并concatentate成列向量MATLAB

Answer 1:

使用find(ismember ...)找到其中的某一天在DATE3的长列显示了再使用的,从那天拉出​​所有的数据,纬度,经度和。

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


Answer 2:

这样如何:结果应该是矢量的单元阵列,从给定的一天对应于该数据的每个矢量。

这当然假定DATE3和数据2的大小相同

 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

我可以用这个看到的唯一问题是,如果你没有数据,每一天,你不一定会知道每个单元代表哪一天。 这很容易通过存储与数据日期的载体来解决。



Answer 3:

正如我在你的其他问题中提到尝试GROUP2CELL从FileExchange功能。

您可以使用它在指数

[newidx, uniqueDate] = group2cell(idx,Date2);

或直接在数据

[Data_PM25, uniqueDate] = group2cell(Data2,Date2);

uniqueDate将所有唯一日期的数组。 uniqueDate(i)将对应于Data_PM25(i)



文章来源: MATLAB Find the indexes that have a particular date