Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab中区间数据的添加_Matlab - Fatal编程技术网

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 我正在寻

嗨,我在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=

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),[])]