倾斜的均匀分布蟒蛇

时间:2014-11-30 02:02:08

标签: python numpy distribution uniform

我想从一个倾斜的均匀分布中获取值,而不是标准的均匀分布,它是从一条直线= 0的直线上绘制出来的值。更具体地说,我想得到来自斜率分布函数的值,如下图2所示。我知道对于第一个,我可以使用numpy.random.uniform(initial,final)。如何进行倾斜分发?我知道乘以一个'斜率'或者将因子缩放到numpy.random.uniform中的值并不是数学上意味着从斜率分布中抽出值。我确实意识到这可能与改变每个绘制出的值的加权方式有关。来源:http://www.itl.nist.gov/div898/handbook/eda/section3/eda3662.htm 请帮忙! standard uniform distribution plot

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用inverse transform sampling解决此问题。

让我们看一个简单的斜率分布,它将生成[0; 1]个数字s.t. f(0) = 0f(1) = 22来自F(x)的规范化,即F(1) = P(x <= 1) = 1按概率定义。

maths

根据逆变换采样方法,要获得具有必要分布的随机变量,您需要将均匀分布的随机变量而不是Y插入到最后的等式中。我们来看看:

In [61]: y = np.random.rand(10000)

In [62]: x = np.sqrt(y)

In [63]: plt.hist(x, bins=100)

enter image description here

答案 1 :(得分:0)

您可以尝试使用stats.rv_continuous创建自己的pdf。

Here这是一个可以帮助你的答案。

一些代码:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import scipy.stats

class linear(scipy.stats.rv_continuous):
    def _cdf(self, x):
        return x**2

distrib = linear(a=0, b=1.0)
d = distrib.rvs(size=10000)

fig, ax = plt.subplots(1, 1)
ax.hist(d, normed=True, histtype='stepfilled', alpha=0.2, bins=100)
plt.show()

分布随机样本的直方图:

enter image description here