1

次のベクトルがあるとしましょう。

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];

ヒスト関数のみを使用して数をカウントすると、次のようになります。

[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

私が今作りたいのは、ビンの各要素を合計することです:

xout =

 0     1     2     3     4     5     6     7

n =

 0     0     2     4     3     1     3     2

ビンサム =

0      0     4    12.4 etc.

たとえば、3 番目のビンの場合、1.5 と 2.5 (ビンのサイズ) の間の n(3)=2 の値があります: 1.7 と 2.3 -> 1.7+2.3=4 -> binsum(3)=4 4 番目のビンには、2,5 と 3,5 の間の n(4)=4 の値があります: 3.2+3.2+3.4+2.6=12.4-> binsum(4)=12.4 など。

この仕事をする簡単な機能はありますか?

4

1 に答える 1

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出力を生成するために明らかに使用したビンではなく、への入力として使用したビンを使用するため、最初に 2 つのゼロを取得しないことに注意してください。dataまた、 に置き換えることでカウントを取得できますones(length(data),1)

于 2012-04-13T01:24:35.867 に答える