Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中的区域划分_Matlab_Range_Histogram_Bins - Fatal编程技术网

matlab中的区域划分

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

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

射程(a)

ans=

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

< 5)将每一个细菌数Xi放入下限小于或等于Xi的席,上限大于席席;此后,对于每一个bin计数,分配给它的席数(=NJ)。 (6) 使用N=10条绘制测得细菌计数的柱状图。 尝试使用MATLAB函数hist(x,N)和bar(c,N)

我知道这是很多,但我绝对没有这家伙的指导,我真的很感激你的帮助:)

计算直方图:

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')