让我们说我们有以下向量:
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等。
是否有一个简单的功能来完成这项工作?
答案 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)
来获取计数。