# binning data in equally spaced intervals

376 ビュー (過去 30 日間)
shobhit mehrotra 2015 年 3 月 11 日
コメント済み: Rahul Kesarkar 2021 年 4 月 7 日
I would like to bin the data in 8 equally spaced bins. I have a the data accessible in vectors [X= conc, Y= alt] this what I have so far to create the bins
binedge = linspace(min(alt),max(alt),6)
then I want to take the average alt and conc of each each bin and plot it. Thanks ##### 4 件のコメント表示非表示 3 件の古いコメント
shobhit mehrotra 2015 年 3 月 11 日
How would i take the average of each bin?

サインインしてコメントする。

### 回答 (2 件)

Josh Meyer 2015 年 3 月 27 日
As others noted, histcounts was introduced in R2014b and provides a great deal more flexibility for problems like this.
To use 8 bins, just do:
% Assume the first column is X, second column is Y
data = [rand(100,1), rand(100,1)];
% Find the bin placement based on the X values
[N,edges,bins] = histcounts(data(:,1),8);
The third output, bins, describes the bin placement of each element. So this makes finding the average X and Y value in each bin simple.
for n = 1:8
bin_means(:,n) = mean(data(bins==n,:))';
end
bin_means =
0.0751 0.1979 0.3342 0.4658 0.5691 0.7113 0.8691 0.9676
0.5100 0.6264 0.4949 0.5172 0.5323 0.5556 0.4381 0.6514
##### 3 件のコメント表示非表示 2 件の古いコメント
Rahul Kesarkar 2021 年 4 月 7 日
How would it work if i have to bin data for a particular date range?
For example range : - weekday 12/06/2017 20:00 to 13/06/2017 08:00 and repeat this for every weekday. Weekend 9/06/2017 20:00 to 12/06/2017 08:00. Sum up all the values in the bin.

サインインしてコメントする。

Stephen 2015 年 3 月 11 日

You can use histc to get bin the data, and then accumarray to get the mean of all of the values in each bin:
>> X = 0.25:0.5:5
X =
0.25 0.75 1.25 1.75 2.25 2.75 3.25 3.75 4.25 4.75
>> [B,idx] = histc(X,0:5);
>> V = accumarray(idx(:),X,[],@mean)
V =
0.5000
1.5000
2.5000
3.5000
4.5000
If you have a newer version, then you should use histcounts instead:
[B,~,idx] = histcounts(...);
##### 2 件のコメント表示非表示 1 件の古いコメント
Stephen 2015 年 3 月 11 日
You can simply repeat the accumarray call for each of your X and Y data vectors:
meanofXvalues = accumarray(idx(:),Xvalues,[],@mean)
meanofYvalues = accumarray(idx(:),Yvalues,[],@mean)

サインインしてコメントする。

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!