matlab中的区域划分
我从一个更大的矩阵中得到以下范围: 射程(a) ans= 我的教授要求我们:将范围划分为N=10个等长段(以下称为“箱”),并为每个箱找到其边界(aj,bj)及其中心cj < 5)将每一个细菌数Xi放入下限小于或等于Xi的席,上限大于席席;此后,对于每一个bin计数,分配给它的席数(=NJ)。 (6) 使用N=10条绘制测得细菌计数的柱状图。 尝试使用MATLAB函数hist(x,N)和bar(c,N) 我知道这是很多,但我绝对没有这家伙的指导,我真的很感激你的帮助:)计算直方图:matlab中的区域划分,matlab,range,histogram,bins,Matlab,Range,Histogram,Bins,我从一个更大的矩阵中得到以下范围: 射程(a) ans= 我的教授要求我们:将范围划分为N=10个等长段(以下称为“箱”),并为每个箱找到其边界(aj,bj)及其中心cj < 5)将每一个细菌数Xi放入下限小于或等于Xi的席,上限大于席席;此后,对于每一个bin计数,分配给它的席数(=NJ)。 (6) 使用N=10条绘制测得细菌计数的柱状图。 尝试使用MATLAB函数hist(x,N)和bar(c,N) 我知道这是很多,但我绝对没有这家伙的指导,我真的很感激你的帮助:)计算直方图: range
range = [94 153 144 59 79 90 131 64]
[n,xout] = hist(range, 10)
xout
是仓位中心,n
仓位计数
绘制条形图:
bar(xout,n)
计算箱边:
width = xout(2)-xout(1)
xoutmin = xout-width/2
xoutmax = xout+width/2
考虑以下示例,它应该解决您的所有问题:
%# 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')
请注意,这可以正确地处理最后一个箱子(阅读本文,了解有关这些边缘情况的讨论)
查看此答案和视频:您也可以查看此问题的答案:它给了我一个错误,上面写着:???错误使用==>accumarray第三个输入SZ必须是一个完整的行向量,每列SUB有一个元素。在29 nj=accumarray时==>EE300Project1出错(binIdx,1,[nbins],@sum)@帕特里克·贝隆:在我看来,你缺少了一个
1
:nj=Accumaray(binIdx,1,[nbins 1],@sum)代码>。这也可以简化为:nj=accumarray(binIdx,1)
@patrick.belon:您应该编辑您的问题并发布您正在使用的代码。我怀疑你做错了什么,因为我上面的例子很好…@Amro,谢谢你的例子。代码似乎只适用于正整数,对吗?如果我们的数据中有0
(即min(M)=0
),该怎么办?@Tin:不,它应该适用于任何数字向量(正/负、整数/浮点数)。向量中的0
值没有任何区别。。
%# 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')