【问题标题】:Average similar time periods MATLAB平均相似时间段 MATLAB
【发布时间】:2016-11-10 02:10:04
【问题描述】:

我有一个带有时间戳和几个列变量的矩阵。 该矩阵跨越一个月的半小时变量。这是矩阵的四列示例

11/11/2015 20:15    31.26410236 35.70104634 35.93171056
11/11/2015 20:45    32.10746291 35.48806277 35.9647747
.
.
.
12/11/2015 20:15    32.10746291 35.48806277 35.9647747
12/11/2015 20:45    32.10746291 35.48806277 35.9647747
.
.
.
13/11/2015 20:15    32.68310429 35.58753807 37.26447422
13/11/2015 20:45    33.05141516 34.8432801  36.48033884
.
.
.
14/11/2015 20:15    32.08328579 34.66482668 34.65446868
14/11/2015 20:45    32.19994433 34.40562145 34.34035989

以小时和分钟为单位求相同时间平均值的最简单方法是什么? 例如。一个月中所有日子 20:45 时每个变量的平均值。

我知道我可以通过将时间戳转换为datenum、获取datenum 的小数部分并按datenum 的小数部分对数据进行排序来实现这一点。之后,我可以用类似的小数 datenums 来阻止平均行。有没有更高效更优雅的方式?

【问题讨论】:

    标签: matlab matrix timestamp mean


    【解决方案1】:

    使用 matlab,您可以直接处理日期和时间,而无需将其转换为以毫秒或秒为单位的时间戳:

    http://es.mathworks.com/help/matlab/date-and-time-operations-1.html

    或者一种简单的方法是将日期转换为日期向量like this

    DateVector = datevec(DateString,formatIn)
    

    然后比较你想要的列:

    [Y,M,D,H,MN,S] = datevec(___)
    
    >> A = datevec('13/11/2015 20:45','dd/mm/yyyy HH:MM')
    
    A =
    
            2015          11          13          20          45           0
    
    >> B = datevec('14/11/2015 20:45','dd/mm/yyyy HH:MM')
    
    B =
    
            2015          11          14          20          45           0
    

    这样比较日期很容易:

    >> A - B
    
    ans =
    
         0     0    -1     0     0     0
    

    正好相差一天

    【讨论】:

    • 感谢您的贡献。如何使用它来分组并找到具有 n 天差异的值的平均值?
    【解决方案2】:

    这就是我最终解决这个问题的方法:

    timestamp=linspace(datenum('2015-11-01 00:00', 'yyyy-mm-dd HH:MM'),datenum('2015-12-01 00:00', 'yyyy-mm-dd HH:MM'),1440); % 30 days
    timestamp=timestamp';
    time_of_day=datetime(datevec(timestamp(1:48)),'Format','HH:mm');
    numdays=30;
    data=rand(length(timestamp),2);
    means=NaN(48,3);
    for tt=1:48
        means(tt,:)=[datenum(time_of_day(tt)) nanmean(data(tt:48:48*numdays,:),1)];
    end
    
        figure;
        plot(time_of_day,means(:,2:3));
        xlim([timestamp(1) timestamp(48)]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      相关资源
      最近更新 更多