python - 快速任意分布随机采样(逆变换采样)

标签 python performance random

random 模块 (http://docs.python.org/2/library/random.html) 有几个固定 函数可以从中随机采样。例如 random.gauss 将从具有给定均值和 sigma 值的正态分布中随机抽取点。

我正在寻找一种方法,在 python。这就是我的意思:

def my_dist(x):
    # Some distribution, assume c1,c2,c3 and c4 are known.
    f = c1*exp(-((x-c2)**c3)/c4)
    return f

# Draw N random samples from my distribution between given limits a,b.
N = 1000
N_rand_samples = ran_func_sample(my_dist, a, b, N)

其中 ran_func_sample 是我所追求的,而 a, b 是从中抽取样本的限制。 python 中是否有类似的东西?

最佳答案

您需要使用逆变换采样方法来获得根据您想要的规律分布的随机值。使用这种方法你可以应用 反函数 在区间 [0,1] 内具有标准均匀分布的随机数。

找到反函数后,你会得到 1000 个根据需要分布的数字,这种方式很明显:

[inverted_function(random.random()) for x in range(1000)]

更多关于逆变换采样:

另外,StackOverflow 上有一个与主题相关的好问题:

关于python - 快速任意分布随机采样(逆变换采样),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21100716/

相关文章:

python - PyQt4、QThread 和打开大文件而不卡住 GUI

创建集合的 Python 性能比较 - set() 与 {} 文字

c++ - QMediaPlayer 和 QVideoWidget 的糟糕表现

javascript - 递归总是能提高性能吗?

jquery - Tumblr API jQuery 随机图像

python - 在 Ubuntu 14.04 上的 Python 2.6 上安装 M2Crypto 0.20.1

python - django settings.py 不会读取单元测试的环境变量

Java 应用程序执行速度非常慢(比 Windows、Linux、AIX 慢 10-100 倍)

java - Random 和 RandomGenerator 的区别

c# - C# 随机数生成器线程安全吗?