hist和sum的组合:是否有功能?

时间:2012-04-12 23:53:30

标签: matlab sum histogram

让我们说我们有以下向量:

data=a=[2.3 3.2 4.1 6.2 7.3 6.4 5.5 4.3 3.2 2.6 1.7 3.4 4.5 5.7 6.8];

如果我们仅使用hist-function计算数字,我们会得到类似的结果:

[n xout]=hist(a,[1:1:max(a)])

n =

 0     0     2     4     3     1     3     2

xout =

 0     1     2     3     4     5     6     7

我现在要做的是对bin的每个元素求和:

xout =

 0     1     2     3     4     5     6     7

n =

 0     0     2     4     3     1     3     2

binsum =

0      0     4    12.4 etc.
例如,对于第三个箱,

具有n(3)= 2个在1.5和2,5之间的值(箱的大小):1.7和2.3 - > 1.7 + 2.3 = 4 - > binsum(3)= 4 对于第四个bin,我有n(4)= 4个值在2,5和3,5:3.2 + 3.2 + 3.4 + 2.6 = 12.4->之间。 binsum(4)= 12.4等。

是否有一个简单的功能来完成这项工作?

1 个答案:

答案 0 :(得分:2)

如果你的直方图箱是由数组minBin:binWidth:maxBin定义的,那么你可以找到箱子的索引,然后总结这样的数据:

minBin = 1;
binWidth = 1;
maxBin = 7;

data=[2.3 3.2 4.1 6.2 7.3 6.4 5.5 4.3 3.2 2.6 1.7 3.4 4.5 5.7 6.8];

%# to create index: First, take care of out-of-range data points
tmp = max(min( data, maxBin),minBin);
%# then, subtract minimum, divide by step, round: this is the binIdx
%# add 1 so that we don't start counting at 0
idx = round( (tmp-minBin)/binWidth ) +1;

%# now we can use accumarray to sum up the data
binSum = accumarray(idx(:),data(:),[floor((maxBin-minBin)/binWidth)+1, 1], @sum, 0)

binSum =

         0
    4.0000
   12.4000
    8.4000
    4.5000
   23.8000
   14.1000

请注意,我没有先得到两个零,因为我使用您用作hist输入的二进制数,而不是那些显然用于生成输出的二进制数。此外,您可以将data替换为ones(length(data),1)来获取计数。