python - 用函数根据特定分布生成随机数
问题描述
我正在尝试根据我用function f (theta) = 1 + alpha*cos(theta)²
;定义的精确分布在 Python 中生成一个随机数。变量 alpha 是一个常数。
不幸的是,我不知道该怎么做,因为不同的随机函数都遵循预定义的分布(正态分布、均匀分布、二项分布......)
你有想法吗?
解决方案
假设f
与概率密度函数 (PDF) 成正比,您可以使用拒绝抽样方法:在框中绘制一个数字,直到该框落入 PDF 中。它适用于任何具有有限域的有界 PDF,只要您知道域和边界是什么(边界是f
域中的最大值)。在这种情况下,界限是1 + alpha
,算法的工作原理如下:
import math
import random
def sample(alpha):
mn=0 # Lowest value of domain
mx=math.pi # Highest value of domain
bound=1+alpha # Upper bound of PDF value
while True:
# Choose an X inside the desired sampling domain.
x=random.uniform(mn,mx)
# Choose a Y between 0 and the maximum PDF value.
y=random.uniform(0,bound)
# Calculate PDF
pdf=1+alpha*math.cos(x)**2
# Does (x,y) fall in the PDF?
if y<pdf:
# Yes, so return x
return x
# No, so loop
推荐阅读
- python - Python:使用 Tensorflow 的文本定位器
- function - ES6 导入函数 - 在 Vue 组件中执行
- reactjs - React Checkbox 没有获得价值 onCheck
- uwp - StorageFileQueryResult.GetFilesAsync() 在 UWP 中与 IndexerOption 正确使用
- angular - 如何在条件语句中异步 api 响应?
- java - 如何从另一个片段中对适配器进行排序
- java - 搜索并列出 .m2(本地)maven 存储库
- regex - 用一些不同的电子邮件域替换电子邮件域
- watchkit - SwiftUI 列表样式
- python - Ebuild 文件格式的正则表达式