【发布时间】:2021-04-23 14:13:23
【问题描述】:
我目前正在 Python 中进行动力学蒙特卡罗模拟,因此我需要生成 0 到 1 之间的伪随机数,它们遵循均匀分布,但我正在寻找获得在某些点上的数字小于 E-1,例如 0.001。我知道这不会很常见,因为它们毕竟是随机数,但我的问题始于蒙特卡洛的实现。
我的蒙特卡罗模拟中的问题,简而言之,我有一个 constraint_probability=c 和一个 pseudo-random number=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 的随机数,或者是否是另一种让我的代码运行的方法。
【问题讨论】:
-
这里根本不清楚你在问什么。一旦您声明随机数在 0 和 1 之间是均匀的,那么均匀性意味着它们同样可能是 0 和 1 之间的任何结果,并且平均只有十分之一的随机数会低于 E-1。如果您想在蒙特卡洛模拟中描述您想要完成的任务,它可能会帮助我们其他人更好地理解您的问题。顺便说一句,一句老程序员的格言是,正确性是第一位的,然后你可以担心优化。
-
感谢您的建议,我编辑了我的帖子
标签: python random montecarlo uniform-distribution