【发布时间】:2011-02-12 04:21:20
【问题描述】:
我目前正在用 python 编写一个需要快速生成大量随机数的应用程序。目前我有一个计划,它使用 numpy 生成一个大批量的所有数字(一次大约 500,000 个)。虽然这似乎比 python 的实现要快。我仍然需要它走得更快。有任何想法吗?我愿意用 C 语言编写它并将其嵌入到程序中或做 w/e 它需要。
对随机数的约束:
- 一组可以有不同界限的 7 个数字:
- 例如:[0-X1、0-X2、0-X3、0-X4、0-X5、0-X6、0-X7]
- 目前我正在生成一个包含 7 个数字的列表,其中包含 [0-1) 的随机值,然后乘以 [X1..X7]
- 一组 13 个数字加起来等于 1
- 目前只生成 13 个数字,然后除以它们的总和
有什么想法吗?预先计算这些数字并将它们存储在文件中会加快速度吗?
谢谢!
【问题讨论】:
-
这几乎可以保证磁盘 I/O 不会使其更快,因此文件存储方法可能不是您想要的。
-
你能提供你缓慢的实现吗?生成 1000_000 个随机整数需要 12 毫秒。你需要多快?
python -mtimeit -s'import numpy as np' 'np.random.randint(low=0, high=500, size=(1000000,1))'->100 loops, best of 3: 11.9 msec per loop -
放大 aaa,不知道您将它们放入的应用程序,很难回答。有比模块
random中的默认值更快的伪随机数生成器,它们的周期更短,这取决于应用程序 - 可能是合适的。 -
[4] * 1000000 应该是最快的。但是,就随机性而言,您可能会发现 xkcd 随机数生成器不能满足您的需求。你能说出这些需求是什么吗?
-
你可以使用浮点数而不是双精度数吗?我认为 numpy 默认为双打。这应该将你的内存减少一半(和带宽)
标签: python performance random numpy