Matlab中区间数据的添加
嗨,我在MATLAB中有如下数据:Matlab中区间数据的添加,matlab,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 我正在寻
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=
i、 e数据在第一行采样的基础上累积在第二列中。MATLAB中是否有函数可以执行此操作?是的,这是以下人员的工作:
使用F
第1列中的值对第2列中的元素求和(accumarray的默认行为)
对于给定的间隔大小s
(感谢Luis Mendo):
因此,通过串联构造输出:
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
耶 通过组合
histc()
和accumarray()
,选择是:
如果运行代码,请记住我将采样间隔(范围
)更改为0.5
此代码适用于所有采样间隔,只需将您想要的间隔定义为
范围
很好地使用了accumarray
!对于任意间隔大小的s
,您可以使用accumarray(圆形(F(:,1)/s),F(:,2),[])
,或者可能使用accumarray(地板(F(:,1)/s),F(:,2),[])
啊,是的,谢谢@LuisMendo我没有想到对任意间隔大小进行概括:)
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
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),[])]