在Matlab中间隔添加数据

时间:2015-06-16 13:14:02

标签: matlab

嗨我在MATLAB中有这样的数据:

F =

1.0000    1.0000
2.0000    1.0000
3.0000    1.0000
3.1416    9.0000
4.0000    1.0000
5.0000    1.0000
6.0000    1.0000
6.2832    9.0000
7.0000    1.0000
8.0000    1.0000
9.0000    1.0000
9.4248    9.0000
10.0000    1.0000

我正在寻找一种在特定时间间隔内对数据求和的方法。例如,如果我希望我的采样间隔为1,则最终结果应为:

F =

1.0000    1.0000
2.0000    1.0000
3.0000    10.0000
4.0000    1.0000
5.0000    1.0000
6.0000    10.0000
7.0000    1.0000
8.0000    1.0000
9.0000    10.0000
10.0000    1.0000

,即基于对第一行的采样,在第二列中累积数据。在MATLAB中有一个函数可以做到这一点吗?

2 个答案:

答案 0 :(得分:3)

是的,这是accumarray的工作:

使用F第1列中的值对第2列中的元素求和(accumarray的默认行为)。

对于给定的大小s的间隔(感谢Luis Mendo):

S = accumarray(round(F(:,1)/s),F(:,2),[]); %// or you can use "floor" instead of "round".

S =

     1
     1
    10
     1
     1
    10
     1
     1
    10
     1

所以通过连接构造输出:

 NewF = [unique(round(F(:,1)/s)) S]

NewF =

     1     1
     2     1
     3    10
     4     1
     5     1
     6    10
     7     1
     8     1
     9    10
    10     1

耶!!

答案 1 :(得分:3)

histc()accumarray()合并:

F =[1.0000    1.0000;...
2.0000    1.0000;...
3.0000    1.0000;...
3.1416    9.0000;...
4.0000    1.0000;...
5.0000    1.0000;...
6.0000    1.0000;...
6.2832    9.0000;...
7.0000    1.0000;...
8.0000    1.0000;...
9.0000    1.0000;...
9.4248    9.0000;...
10.0000    1.0000];

range=1:0.5:10;

[~,bin]=histc(F(:,1),range);

result= [range.' accumarray(bin,F(:,2),[])]

如果您运行代码,请记住我将采样间隔(range)更改为0.5。

此代码适用于所有采样间隔,只需将您想要的间隔定义为range