【问题标题】:Matlab: sum for two time series dataset?Matlab:两个时间序列数据集的总和?
【发布时间】:2012-06-14 13:18:00
【问题描述】:

当两个时间序列数据集都有基于 YEAR 和 DOY 的观察时,我喜欢总结它们的观察。当任一数据集为 0 时,我也喜欢跳过求和,并且只对 DOY 中的最大观察值求和。

以下是示例:data_1 和 data_2。

data_1

% YEAR  DOY  OBS_1

1994    109 0.42
1994    110 0.73    
1994    111 0.69    
1994    113 0.8    
1994    114 0.43    
1994    115 0.75    
1994    123 0.6    
1994    127 0.2    
1994    131 0.44    
1994    131 0.43    
1994    131 0.63    
1994    132 0.99    
1994    132 0.51    
1994    133 0.71    
1994    133 0.99    
1994    134 0.65    
1994    134 0.69    
1994    134 0.97    
1994    134 0.03    
1994    134 0    
1994    134 0    
1994    135 0.68    
1994    135 0.72    
1994    136 1.22    
1994    136 0    
1994    136 0    
1994    136 1.28    
1994    136 1.34

数据_2:

% YEAR  DOY  OBS_2    
1994    110 0.92    
1994    111 0.34    
1994    113 0.42    
1994    114 0.37    
1994    115 0.38    
1994    122 0.22    
1994    127 0.32    
1994    131 0.34   
1994    131 0.2    
1994    132 0.51    
1994    132 0.43
1994    132 0.4    
1994    133 0.4    
1994    134 0.32    
1994    134 0.39    
1994    135 0.35    
1994    135 0.38    
1994    135 0.34    
1994    135 1.83    
1994    135 0.22    
1994    135 0.36    
1994    135 0.39    
1994    135 0.24    
1994    135 0.39    
1994    136 0.42    
1994    136 0.29    
1994    136 0.3    
1994    136 0.4    
1994    136 0.54    
1994    136 0.4

【问题讨论】:

  • 请编辑:选择代码并使用代码格式图标对其进行格式化
  • “当任一数据集为 0 时”是什么意思?
  • 我看到您在两个数据集中都有重复的 DOY 值。你想总结所有这些,还是什么?请澄清,并在可能的情况下举例说明。

标签: matlab join matrix time-series


【解决方案1】:

这是第一次尝试:

%# maximum day of year
sz = max(max(data_1(:,2)),max(data_2(:,2)));
doy = (1:sz)';

%# get max value for each DOY in each dataset
v1 = accumarray(data_1(:,2), data_1(:,3), [sz 1], @max);
v2 = accumarray(data_2(:,2), data_2(:,3), [sz 1], @max);

%# compute the sum
v = v1 + v2;

%# keep entries where none of the values were zeros
idx = (v1~=0 & v2~=0);
v = [doy(idx(:)) v(idx(:))];

结果:

>> v
v =
          110         1.65
          111         1.03
          113         1.22
          114          0.8
          115         1.13
          127         0.52
          131         0.97
          132          1.5
          133         1.39
          134         1.36
          135         2.55
          136         1.88

我没有考虑 year 字段,因为它的 1994 在您的所有数据中...

【讨论】:

  • 嗨 Amro,如何将年份字段考虑在内,因为真实的数据集带有多年的观察结果。你真的让我的生活更轻松。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2018-04-15
相关资源
最近更新 更多