如何解决阶数小于 E-1 的随机数
我目前正在 Python 中进行动力学蒙特卡罗模拟,因此我需要生成遵循均匀分布的 0 到 1 之间的伪随机数,但我正在寻找获得在某些点数字小于 E-1,例如 0.001。我知道这不会很常见,因为它们毕竟是随机数,但我的问题始于蒙特卡洛的实现。
我的 Monte Carlo 模拟中的问题,简而言之,我有一个 constraint_probability=c 和一个 伪随机数=r,但由于我的动态问题,我的条件是我的代码仅在 r 时运行。如果我让例如 c=0.001,我的代码永远不会运行。
我的第一个想法是使用random.uniform
,但我发现得到的数字至少是 E-2 的顺序。
后来我想我的问题可以通过做如下函数来解决:
from scipy.stats import uniform
def numrand():
vec=np.linspace(uniform.ppf(0),uniform.ppf(1),10000)
return random.choice(vec)
我不知道是否有可能获得小于 E-1 的随机数,或者是否有另一种让我的代码运行的方法。
解决方法
numpy.random 可能会在这里帮助您,创建 0 到 1 之间的 10000 个随机数,您可以使用均匀分布
np.random.default_rng().uniform(0,1,10000)
或者对于较旧的 numpy 版本:
np.random.uniform(0,10000)
,
你可以告诉np.random.uniform
max and min value that you want。由于您似乎想要 ~10-5 订单的数字,因此请求 min=1e-5
和 max=1e-4
:
vec = np.random.uniform(1e-5,1e-4,10000)
assert (vec >= 1e-5).all() and (vec < 1e-4).all()
由于样本在半开区间 [min,max)
上均匀分布,您可以放心,您从分布中得到的任何数字都将是 10-5
这也适用于其他发行版。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。