随机数遵循Python中的线性下降分布

时间:2015-07-01 18:22:58

标签: python random frequency-distribution

我想生成跟随线性频率分布下降的随机数,以n = 1-x为例。

然而,numpy库似乎只提供更复杂的发行版。

2 个答案:

答案 0 :(得分:3)

所以,事实证明你可以完全使用random.triangular(0,1,0)。请参阅此处的文档:https://docs.python.org/2/library/random.html

  

random.triangular(低,高,模式)

     

返回一个随机浮点数N,使得低< = N< =高并且在这些边界之间具有指定的模式。

使用matplotlib制作的直方图:

bins = [0.1 * i for i in range(12)]
plt.hist([random.triangular(0,1,0) for i in xrange(2500)], bins)

enter image description here

答案 1 :(得分:1)

对于具有密度的非规范化PDF

1-x, in the range [0...1)

归一化常数是1/2

CDF等于2x-x^2

因此,抽样非常明显

r = 1.0 - math.sqrt(random.random())

示例程序产生了几乎相同的情节

import math
import random
import matplotlib.pyplot as plt

bins = [0.1 * i for i in range(12)]
plt.hist([(1.0 - math.sqrt(random.random())) for k in range(10000)], bins)
plt.show()

更新

让我们将S表示为一个整数,S_a^b是从ab的明确整数。

所以

Denormalized PDF(x) = 1-x

归一化:

N = S_0^1 (1-x) dx = 1/2

因此,规范化PDF

PDF(x) = 2*(1-x)

让我们计算CDF

CDF(x) = S_0^x PDF(x) dx = 2x - x*x

检查:CDF(0) = 0CDF(1) = 1

通过求解x

,通过逆CDF方法进行采样
CDF(x) = U(0,1)

其中U(0,1)在[0,1)

中是均匀随机的

这是带解的简单二次方程

x = 1 - sqrt(1 - U(0,1)) = 1 - sqrt(U(0,1))

直接翻译成Python代码

相关问题