数组中具有相同时间戳的两个值的平均值

时间:2016-01-13 07:15:43

标签: arrays matlab

关注我的问题Merge 2 vectors according their time values:如果数组中的两个值具有相同的时间戳,我需要将它们组合起来并使用平均值。我怎样才能以优雅的方式实现这一目标?

这是一个例子:

%1st column = time; 2nd column = value
%there are two values with timestamp '6'
C = [1,34;2,34;5,68;6,2;6,3;7,45]
C =

     1    34
     2    34
     5    68
     6     2
     6     3
     7    45
%after processing
C_proc =

    1.0000   34.0000
    2.0000   34.0000
    5.0000   68.0000
    6.0000    2.5000
    7.0000   45.0000

1 个答案:

答案 0 :(得分:2)

这就是accumarray的用途:

out = accumarray(C(:,1),C(:,2),[],@mean)  %// use with care, see below

如果您不希望跳过索引的零,请将其与unique结合使用,这也避免了第一种方法的整数时间戳的必要假设:

[a,~,u] = unique(C(:,1))
out = [a accumarray(u,C(:,2),[],@mean)]
out =

    1.0000   34.0000
    2.0000   34.0000
    5.0000   68.0000
    6.0000    2.5000
    7.0000   45.0000