【发布时间】:2009-07-23 18:10:07
【问题描述】:
在 Jython 中使用(伪)随机数时,使用 Python random 模块还是 Java 的 random 类会更有效吗?
【问题讨论】:
-
请详细说明您认为“高效”的内容。
-
你试过测量每个所需的时间吗?
在 Jython 中使用(伪)随机数时,使用 Python random 模块还是 Java 的 random 类会更有效吗?
【问题讨论】:
在我的 Mac 上进行简单测试时,Python 的版本要快得多:
jython -m timeit -s "import random" "random.random()"
1000000 次循环,3 次中的最佳:每个循环 0.266 微秒
对
jython -m timeit -s "import java.util.Random; random=java.util.Random()" "random.nextDouble()"
1000000 次循环,3 次中的最佳:每个循环 1.65 微秒
Jython 版本 2.5b3 和 Java 版本 1.5.0_19。
【讨论】:
Java 的 Random 类使用(并且 Java 规范确实必须使用)线性同余算法,而 Python 使用 Mersenne Twister。 Mersenne 保证极高的质量(虽然不是 crypto 质量!)随机数和非常长的周期(53 位精度浮点数,周期 2**19937-1);线性同余生成器有众所周知的issues。如果您并不真正关心随机数的质量,而只关心速度,那么 LCG 可能会更快,因为它不那么复杂。
【讨论】: