【发布时间】:2011-12-20 18:28:47
【问题描述】:
我正在进行编程项目,该项目涉及在 Python 中进行的一些相当广泛的蒙特卡洛模拟,因此会生成大量随机数。几乎所有的,如果不是全部的话,将能够由 Python 的内置随机模块生成。
我是一个编码新手,不熟悉高效和低效的做事方式。将所有随机数生成为一个列表,然后遍历该列表,或者每次调用函数时生成一个新的随机数,这将处于一个非常大的循环中,是不是更快?
或者其他一些无疑更聪明的方法?
【问题讨论】:
-
如果您使用的是 Linux,将一堆数字
/dev/random读入一个文件,然后再使用,速度会更快,而且数字的质量可能会更好。并不是说 Python 的随机生成器不好。 -
@kaloyan:如果 OP 使用
random.SystemRandom而不是random模块,那么它将在 *nix 上使用/dev/urandom,在 Windows 上使用CryptGenRandom。这绰绰有余。 -
一个更快的方法是使用 NumPy 的 random.randint 方法。在 Numpy 中(在我相当旧的机器上)生成一个包含 100 万个随机整数的数组需要 45 毫秒,而在 Python 循环中需要 5.5 秒。
-
您打算多久使用一次?或者 - 您的蒙特卡洛模拟有多广泛(慢)?如果每次运行需要 24 小时,那么生成 1M 个数字是否需要毫秒或秒并不重要。仅在重要时才优化某些内容...
-
@FrerichRaabe 我知道我的特定应用程序,我不会打扰 - 我愿意接受相当粗略的随机性。