所以,这就是交易。我有一大堆介于 0 和 1 之间的浮点数。我想要一个一维浮点数数组,用于计算特定箱中的实例数。在单位间隔上均匀分布有 32 个 bin。
我认为规范直方图会做我想做的事,但我得到了一些令人费解的行为。基本上,归一化直方图应该返回我想要的(我会想到的),但它会抛出 [0,1] 之外的值。
>>> from numpy import *
>>> import matplotlib. pyplot as plt
>>> a = random.normal(0.4,0.1,1024)
>>> plt.hist(a, bins=32,range = ([0,1]),normed=True)
(array([ 0. , 0. , 0.0625 , 0.03125, 0.15625, 0.40625,
0.5 , 1. , 2.0625 , 2. , 3.125 , 3.65625,
3.78125, 4.3125 , 3.3125 , 2.59375, 1.8125 , 1.40625,
0.90625, 0.34375, 0.375 , 0.0625 , 0.0625 , 0.03125,
0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. ]), array([ 0. , 0.03125, 0.0625 , 0.09375, 0.125 , 0.15625,
0.1875 , 0.21875, 0.25 , 0.28125, 0.3125 , 0.34375,
0.375 , 0.40625, 0.4375 , 0.46875, 0.5 , 0.53125,
0.5625 , 0.59375, 0.625 , 0.65625, 0.6875 , 0.71875,
0.75 , 0.78125, 0.8125 , 0.84375, 0.875 , 0.90625,
0.9375 , 0.96875, 1. ]), <a list of 32 Patch objects>)
>>> histogram(a, bins=32,range = ([0,1]),density=True)
(array([ 0. , 0. , 0.0625 , 0.03125, 0.15625, 0.40625,
0.5 , 1. , 2.0625 , 2. , 3.125 , 3.65625,
3.78125, 4.3125 , 3.3125 , 2.59375, 1.8125 , 1.40625,
0.90625, 0.34375, 0.375 , 0.0625 , 0.0625 , 0.03125,
0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. ]), array([ 0. , 0.03125, 0.0625 , 0.09375, 0.125 , 0.15625,
0.1875 , 0.21875, 0.25 , 0.28125, 0.3125 , 0.34375,
0.375 , 0.40625, 0.4375 , 0.46875, 0.5 , 0.53125,
0.5625 , 0.59375, 0.625 , 0.65625, 0.6875 , 0.71875,
0.75 , 0.78125, 0.8125 , 0.84375, 0.875 , 0.90625,
0.9375 , 0.96875, 1. ]))
事实上,这种行为不仅仅是小浮动。如果您使正态分布以 7.4 为中心并将范围向上移动到 [7,8],您会得到同样令人费解的行为。
你会得到与numpy
'histogram
函数和matplotlib
'相同的行为hist
。(我认为这是前者的包装?有点?)
我在做傻事吗?这是一个错误吗?有没有更好的方法来创建表示近似数据的离散分布的数组?