你如何规范直方图,使每个bin的总和为1?

时间:2011-03-14 19:22:22

标签: matlab

如何规范化直方图A,使每个bin的总和为1

将直方图除以垃圾箱的宽度,你如何绘制它

我有这个

dist        = rand(50)    
average     = mean(dist, 1);   
[c,x]       = hist(average, 15);    
normalized  = c/sum(c);
bar(x, normalized, 1)

在这种情况下,n = 50

  • 获取价值的公式是什么? 均值和方差^ 2?我们写N(mean, (variance^2) / 50),但是怎么样?
  • 如何绘制均匀分布和正态分布?

直方图必须接近正态分布。

1 个答案:

答案 0 :(得分:6)

这是规范概率密度函数的一种非常不寻常的方法。我假设你想要标准化,使曲线下面积为1.在这种情况下,这就是你应该做的。

[c,x]=hist(average,15);
normalized=c/trapz(x,c);
bar(x,normalized)

无论哪种方式,要回答您的问题,您都可以使用randn生成正常分布。您现在正在生成50x50均匀分布矩阵,并沿一维求和以近似正态高斯。这是不必要的。要生成1000点的正态分布,请使用randn(1000,1)或者如果需要行向量,请将其移调或翻转数字。要生成均值mu和方差sigma2的高斯分布,并绘制其pdf,您可以(示例)

mu=2;
sigma2=3;
dist=sqrt(sigma2)*randn(1000,1)+mu;
[c,x]=hist(dist,50);
bar(x,c/trapz(x,c))

尽管可以使用统计工具箱中的专用函数完成这些操作,但这同样简单明了,不需要额外的工具箱。

修改

我错过了你想知道如何生成均匀分布的部分。 rand默认情况下会为[0,1]上的统一分布提供随机变量。得到一个r.v.来自[a, b]之间的统一分布,请使用a+(b-a)*rand