我有一个关于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选项。
答案 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 参数获得的结果相同的结果