numpy.histogram如何与normal = True选项一起使用

时间:2014-09-08 12:23:14

标签: python numpy

我有一个关于numpy.histogram选项 normed 的问题,函数是:

numpy.histogram(a,bins = 10,range = None, normed = False,weight = None,density = None)

根据定义:numpy.histogram

标准:bool,可选

由于混乱/错误行为导致Numpy 1.6中不推荐使用此关键字。它将在Numpy 2.0中删除。请改用density关键字。如果为False,则结果将包含每个bin中的样本数。如果为True,则结果是bin处的概率密度函数的值,进行归一化,使得该范围内的积分为1.请注意,后一种行为已知具有不等的bin宽度的错误;用密度代替。 权重:array_like,可选

我尝试使用此代码:

   imhist, bins = histogram([0,1,2,3], bins=4, normed=True)
   print "normed=True:", imhist
   print "bins:", bins
   Output:
   normal=True: [ 0.33333333  0.33333333  0.33333333  0.33333333]
   bins: [ 0.    0.75  1.5   2.25  3.  ]

   imhist, bins = histogram([0,1,2,3], bins=4)
   print "normed=None:", imhist
   print "bins:", bins
   Output:
   normal=None: [1 1 1 1]
   bins: [ 0.    0.75  1.5   2.25  3.  ]

我感到困惑的是关于when normed = True,“结果是bin处的概率密度函数的值,归一化使得该范围内的积分为1”。因为我认为模仿应该是这样的:

   normal=True: [0.25  0.25  0.25  0.25]

4个值在4个箱子中同样下降,这就是为什么“正常=无:[1 1 1 1]”

   Value:[ 0         1      2      3   ]
   bins: [ 0.    0.75  1.5   2.25  3.  ]

我已经引用了这篇How does numpy.histogram() work?帖子,但确实使用了normed = True选项。

2 个答案:

答案 0 :(得分:2)

他们说,文件没有说它会返回总计为1的值

  

如果为True,则结果为概率密度函数的值   在bin处,归一化使得该范围内的积分为1。

因此,在您的情况下,imhist不应该是[0.25]*4,而是:

>>> imhist
array([ 0.33333333,  0.33333333,  0.33333333,  0.33333333])
>>> imhist * np.diff(bins)
array([ 0.25,  0.25,  0.25,  0.25])
>>> (imhist * np.diff(bins)).sum()
1.0

那是你得到的不变量。每当你更改垃圾箱时,你都会改变这些值。

答案 1 :(得分:0)

numpy.histogram(input, bins=10, density=True)

使用 density = True 会在后端执行以下操作。

1.首先,根据bin宽度和a中的最小值和最大值,它会首先计算一个特定的bin宽度,然后创建一个直方图,其中X轴是a,Y轴是输入的数量。

2.接下来它将计算每个数据点的相对频率,即将每个数据点的数量除以数据点的总数。这些是相对频率,也可以解释为概率值。这种解释是基于大数定律的概念

3. 任何 PDF 中的 Y 值都不是实际概率,而是概率密度。因此,如果将相对频率除以 bin 宽度,我们将得到与仅使用密度 =True 参数获得的结果相同的结果

相关问题