Jython中的随机性
在Jython中使用(伪)随机数时,使用Python的随机模块和Java的随机类,哪个更高效呢?
2 个回答
4
Java的随机数类使用的是一种叫做线性同余算法的方式,这也是Java规定必须使用的。而Python则使用的是梅森旋转算法。梅森旋转算法能生成非常高质量的随机数(虽然不是那种用于加密的高质量随机数!),而且它的周期非常长(可以生成53位精度的浮点数,周期是2的19937次方减1)。相比之下,线性同余生成器有一些大家都知道的问题。如果你对随机数的质量不太在意,只在乎速度的话,线性同余算法可能会更快,因为它的实现相对简单。
9
在我这台Mac上,Python的版本在一个简单的测试中运行得快得多:
jython -m timeit -s "import random" "random.random()"
进行了1000000次循环,最好的结果是每次循环0.266微秒
对比
jython -m timeit -s "import java.util.Random; random=java.util.Random()" "random.nextDouble()"
进行了1000000次循环,最好的结果是每次循环1.65微秒
这是Jython版本2.5b3和Java版本1.5.0_19的测试结果。