8

在 Jython 中使用(伪)随机数时,使用 Python random 模块或 Java 的 random 类会更有效吗?

4

2 回答 2

9

在我的 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。

于 2009-07-23T18:26:53.913 回答
4

Java 的 Random 类使用(并且确实必须按照 Java 的规范使用)线性同余算法,而 Python 使用 Mersenne Twister。Mersenne 保证极高的质量(尽管不是加密质量!)随机数和非常长的周期(53 位精度浮点数,周期 2**19937-1);线性同余生成器有众所周知的问题。如果您并不真正关心随机数的质量,而只关心速度,那么 LCG 可能会更快,因为它不那么复杂。

于 2009-07-23T18:28:41.617 回答