python - 在python中实现特定的分布
问题描述
我想1<l<10
有概率回来1/(2^(l-1))
我应该如何做到这一点,而不是:
x = random()
if x < 0.5:
return 2
等等
谢谢你
解决方案
这会很有趣......我对这些东西有点生疏,所以一个好的数学家可以修正我的推理。
要从公式生成分布,您首先需要进行一些积分并计算指定区间的累积密度函数。特别是我们需要开始计算归一化常数。
对于“k”,这个积分给出:
累积密度函数的“意义”是“获得属于我需要的区间的某个数字的概率是多少?”。这个问题可以换个角度看:“取小于或等于 10 的数的概率一定是 1”。这导致以下方程有助于找到参数“C”。请注意,第一个 therm 是 k,第二个 therm 是 2^(1-x) 的一般积分,其中我将 x 替换为 10。
解决了这个问题,我们终于到达了 CDF(同样,找到它的方法可能更容易):
此时我们需要反转 X 的 CDF。X 现在是我们在 0 和 1 之间的随机数生成器。公式为:
在 python 代码中,我尝试了以下操作:
import numpy as np
import matplotlib.pyplot as plt
a=[ 1- np.log2(1-(1-2**(-9))*np.random.rand()) for i in range(10000)]
plt.hist(a, normed=True)
这有意义吗?
推荐阅读
- java - Hibernate 过滤器不适用于连接实体
- javascript - 角度过滤器数组
- php - 如何在codeigniter中设置查询超时
- ruby-on-rails - codebuild / rails / rspec 失败未发送错误信号
- python - 使 Python 能够通过 SSH 连接到 MySQL
- sql - 通过查询多数据库实例/数据库服务器获取数据库名称、用户名 - 结果显示在单独的表中,
- swift - 如何将 RxSwift 转换为组合框架
- excel - 取具有特定名称“Statu”的列范围内的值
- sql - 如何从postgres sql中的json值列表中获取特定的索引(第n个位置)元素
- git - 将文本保存到存储库而不创建文件?