Python 浮点的标准化直方图:numpy/matplotlib中的意外行为
那么,就这么定了。我有一个很大的介于0和1之间的浮动数组。我想要一个1-d浮点数数组,用于计算特定容器中有多少实例。在单位间隔内有32个料箱均匀分布 我原以为一个标准化的柱状图可以满足我的要求,但我有一些令人费解的行为。基本上,标准化直方图应该返回我想要的(我会认为),但它抛出的值超出了[0,1]Python 浮点的标准化直方图:numpy/matplotlib中的意外行为,python,numpy,matplotlib,Python,Numpy,Matplotlib,那么,就这么定了。我有一个很大的介于0和1之间的浮动数组。我想要一个1-d浮点数数组,用于计算特定容器中有多少实例。在单位间隔内有32个料箱均匀分布 我原以为一个标准化的柱状图可以满足我的要求,但我有一些令人费解的行为。基本上,标准化直方图应该返回我想要的(我会认为),但它抛出的值超出了[0,1] >>> from numpy import * >>> import matplotlib. pyplot as plt >>> a = rand
>>> 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. ]))
来自numpy导入的>>*
>>>导入matplotlib。pyplot作为plt
>>>a=随机。正常(0.4,0.11024)
>>>plt.hist(a,bin=32,range=([0,1]),normed=True)
(数组([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.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,仓位=32,范围=([0,1]),密度=真)
(数组([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.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
可以获得相同的行为。(我认为这是前者的包装?有点?)
我在做傻事吗?这是虫子吗?有没有更好的方法来创建表示近似数据的离散分布的数组
我在做傻事吗
嗯,是的,从某种意义上说,在有些事情令人困惑时不阅读文档是愚蠢的,但老实说,我通常也要晚很多才会阅读文档,所以我不适合扔石头。(^)
从帮助(plt.hist)
:
基本上,正常化保证的是什么
>>> a = np.random.normal(0.4,0.1,1024)
>>> n, bins, patches = plt.hist(a, bins=32,range = ([0,1]),normed=True)
>>> (np.diff(bins) * n).sum()
1.0
我在做傻事吗
嗯,是的,从某种意义上说,在有些事情令人困惑时不阅读文档是愚蠢的,但老实说,我通常也要晚很多才会阅读文档,所以我不适合扔石头。(^)
从帮助(plt.hist)
:
基本上,正常化保证的是什么
>>> a = np.random.normal(0.4,0.1,1024)
>>> n, bins, patches = plt.hist(a, bins=32,range = ([0,1]),normed=True)
>>> (np.diff(bins) * n).sum()
1.0
我在做傻事吗
嗯,是的,从某种意义上说,在有些事情令人困惑时不阅读文档是愚蠢的,但老实说,我通常也要晚很多才会阅读文档,所以我不适合扔石头。(^)
从帮助(plt.hist)
:
基本上,正常化保证的是什么
>>> a = np.random.normal(0.4,0.1,1024)
>>> n, bins, patches = plt.hist(a, bins=32,range = ([0,1]),normed=True)
>>> (np.diff(bins) * n).sum()
1.0
我在做傻事吗
嗯,是的,从某种意义上说,在有些事情令人困惑时不阅读文档是愚蠢的,但老实说,我通常也要晚很多才会阅读文档,所以我不适合扔石头。(^)
从帮助(plt.hist)
:
基本上,正常化保证的是什么
>>> a = np.random.normal(0.4,0.1,1024)
>>> n, bins, patches = plt.hist(a, bins=32,range = ([0,1]),normed=True)
>>> (np.diff(bins) * n).sum()
1.0
我意识到只要设置
normed=hist/float(sum(hist))
就很容易了,其中hist
是未设置规范的柱状图(效果很好)。但令人费解的是,无论如何都不会发生这种情况。标准化的输出将在箱子的范围内积分到1的值。我意识到设置normed=hist/float(sum(hist))
非常容易,其中hist
是非标准化的直方图(工作正常)。但令人费解的是,无论如何都不会发生这种情况。标准化的输出将在箱子的范围内积分到1的值。我意识到设置normed=hist/float(sum(hist))
非常容易,其中hist
是非标准化的直方图(工作正常)。但令人费解的是,无论如何都不会发生这种情况。标准化的输出将在箱子的范围内积分到1的值。我意识到设置normed=hist/float(sum(hist))
非常容易,其中hist
是非标准化的直方图(工作正常)。但令人费解的是,无论如何情况并非如此。标准化的输出将在容器的范围内积分到1的值。