在numpy中创建像范围一样的“正态分布”

时间:2019-04-09 17:59:31

标签: python numpy normal-distribution

我正在尝试将数组“合并”到容器中(类似于直方图)。我有一个输入数组RewriteEngine On RewriteBase / RewriteCond %{HTTP_COOKIE} lang=([^;]+) [NC] RewriteRule ^(.*)$ /$1?lang=%1 [NC,L,QSA] RewriteCond %{HTTP_COOKIE} !^.*userstate.*$ [NC] RewriteRule .* /login-error/set-cookie-first.cgi [NC,L] 和一个范围input_array。整体功能如下所示:

bins = np.linspace(-200, 200, 200)

所以

def bin(arr):
    bins = np.linspace(-100, 100, 200)
    return np.histogram(arr, bins=bins)[0]

将返回:

bin([64, 19, 120, 55, 56, 108, 16, 84, 120, 44, 104, 79, 116, 31, 44, 12, 35, 68])

但是,我希望我的垃圾箱更“详细”,因为我接近0 ...类似于理想的正态分布。结果,当我接近0时,我可能会有更多的垃圾箱(即短距离),并且当我朝该范围移动时,垃圾箱会更大。有可能吗?

更具体地说,除了在一定范围内具有相同宽度的垃圾箱外,我是否可以有一系列范围,其中朝向中心的垃圾箱小于朝向极端的垃圾箱?

我已经看过诸如thisnumpy.random.normal之类的答案,但是有些事情并没有点击右键。

1 个答案:

答案 0 :(得分:1)

使用反误差函数生成垃圾箱。您需要缩放垃圾箱以获取所需的精确范围

之所以能够进行此转换,是因为反误差函数在零附近比在+/-一处更平坦。

inverse error function

from scipy.special import erfinv
erfinv(np.linspace(-1,1))
# returns: 
array([       -inf, -1.14541135, -0.8853822 , -0.70933273, -0.56893556,
       -0.44805114, -0.3390617 , -0.23761485, -0.14085661, -0.0466774 ,
        0.0466774 ,  0.14085661,  0.23761485,  0.3390617 ,  0.44805114,
        0.56893556,  0.70933273,  0.8853822 ,  1.14541135,         inf])