浮点值可以作为参数传递给 random.seed() 吗?这是否会带来不可预见的问题?
换句话说。是……
random.seed(0.99999999)
<use a few thousand random numbers>
random.seed(1)
<use a few thousand random numbers>
...功能上等同于...
random.seed(0)
<use a few thousand random numbers>
random.seed(1)
<use a few thousand random numbers>
快速测试表明两组代码都运行良好,并且从表面上看,输出似乎是独立且确定的。
我很想知道在种子集之间的独立性很重要的情况下使用这种种子方法是否完全安全。获得确定性结果也很重要。我检查了一些文档:Python 2.7 documentation和 Python 3.8 documentation并进行了一些谷歌搜索,只发现对用作种子的整数(或转换为整数的其他数据类型)的引用。我看不到任何对 float 的引用,这让我想知道它们是否“安全”,因为它们以可预测的方式工作,没有令人讨厌的意外。
我目前正在使用 Python 2.7,但也对更现代版本的答案感兴趣。
最佳答案
使用 float 作为种子是预期的功能:
supported seed types are: None, int, float, str, bytes, and bytearray.
参见:https://github.com/python/cpython/blob/master/Lib/random.py#L156
每次获得完全相同的浮点值对于获得相同的种子至关重要,但这并不太困难。始终获得相同浮点值的最可靠方法是不对它进行任何计算,或接受任何用户输入。如果你想保证完全控制,可以使用 struct.unpack
从原始二进制数据生成 float 。
关于python - 使用 float 为 Python RNG 播种是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60420631/