【问题标题】:MATLAB: Averaging time-series data without loops?MATLAB:在没有循环的情况下平均时间序列数据?
【发布时间】:2013-06-06 14:09:36
【问题描述】:

我以 30 分钟的间隔测量了一些变量。时间戳以datevecdatenum 格式提供。我要计算...

a) ... 每日平均值和
b) ... 时间 x 的平均值,例如11:30 时的温度,12:00 时的温度等。对我的整个数据集进行平均。

虽然这或多或少可以通过循环轻松完成,但我想知道是否有更简单/更方便的方式来处理时间序列,因为这毕竟是一项非常基本的任务?

/edit 1:根据要求:click me for sample data

【问题讨论】:

  • 如果您发布一些示例数据,我可以通过accumarray() 提供解决方案。
  • 我希望100个测量就足够了:click me for sample data

标签: matlab time-series average


【解决方案1】:

考虑到datevec()输出存储在tvec中,数据存储在x中,与unique(...,'rows')分组并与accumarray()累加:

% Group by day
[unDates, ~, subs] = unique(tvec(:,1:3),'rows');

% Accumulate by day
[unDates accumarray(subs, x, [], @mean)]

% Similarly by hour
[unHours, ~, subs] = unique(tvec(:,4:5),'rows');
[unHours accumarray(subs, x, [], @mean)]

【讨论】:

  • +1:accumarray 的任何有效解决方案都值得拥有!应该尽可能地提升那个婴儿:)
猜你喜欢
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2014-06-19
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多