在matlab中将范围划分为bin

时间:2011-10-27 04:29:59

标签: matlab range histogram bins

我从更大的矩阵中得到以下范围:

范围(a)中

ans =

94   153   144    59    79    90   131    64

我的教授要求我们:将范围划分为N = 10个等长段(以下称为“箱”),并为每个箱找到其边界(aj,bj)及其中心cj。 / p>

(5)将每个测量的细菌数xi放入下限小于或等于xi且上限大于xi的bin中;此后,对于每个bin计数,分配给它的xi的数量(= nj)。

(6)使用N = 10巴绘制测量的细菌计数的直方图。 尝试使用MATLAB函数hist(x,N)和bar(c,n)

我知道这很多,但我绝对没有这个家伙的指示,真的很感激帮助之手:)

2 个答案:

答案 0 :(得分:8)

考虑以下示例,它应该解决所有问题:

%# random data vector of integers
M = randi([50 200], [100 1]);

%# compute bins
nbins = 10;
binEdges = linspace(min(M),max(M),nbins+1);
aj = binEdges(1:end-1);     %# bins lower edge
bj = binEdges(2:end);       %# bins upper edge
cj = ( aj + bj ) ./ 2;      %# bins center

%# assign values to bins
[~,binIdx] = histc(M, [binEdges(1:end-1) Inf]);

%# count number of values in each bin
nj = accumarray(binIdx, 1, [nbins 1], @sum);

%# plot histogram
bar(cj,nj,'hist')
set(gca, 'XTick',binEdges, 'XLim',[binEdges(1) binEdges(end)])
xlabel('Bins'), ylabel('Counts'), title('histogram of measured bacterial')

请注意,这会正确处理最后一个bin(请阅读此related question以获取有关这些边缘情况的讨论)

screenshot

答案 1 :(得分:3)

计算直方图:

range = [94   153   144    59    79    90   131    64]
[n,xout] = hist(range, 10)

xout是bin中心,n bin计数。

绘制条形图:

 bar(xout,n)

计算bin边缘:

width = xout(2)-xout(1)
xoutmin = xout-width/2
xoutmax = xout+width/2