我想要一个可以生成伪随机值序列的函数,但该序列每次运行都是可重复的。我想要的数据必须在给定范围内相当好的随机分布,它不一定是完美的。
我想编写一些代码,根据随机数据对其运行性能测试。我希望每台机器上的每次测试运行的数据都相同,但由于存储原因,我不想随测试一起发送随机数据(它最终可能会达到很多兆字节)。
图书馆为random
模块似乎并没有说相同的种子在任何机器上总是会给出相同的序列。
编辑:如果您建议我播种数据(正如我上面所说),请提供说明该方法有效并且适用于一系列机器/实现的文档。
编辑:Mac OS X 上的 CPython 2.7.1 和 PyPy 1.7 以及 CPython 2.7.1 和 CPython 2.52=.2 Ubuntu 似乎给出了相同的结果。尽管如此,还没有任何文档白纸黑字地规定这一点。
有任何想法吗?
为此,我使用了重复 MD5 哈希,因为哈希函数的目的是跨平台一对一转换,因此它在不同平台上始终是相同的。
import md5
def repeatable_random(seed):
hash = seed
while True:
hash = md5.md5(hash).digest()
for c in hash:
yield ord(c)
def test():
for i, v in zip(range(100), repeatable_random("SEED_GOES_HERE")):
print v
Output:
184 207 76 134 103 171 90 41 12 142 167 107 84 89 149 131 142 43 241 211 224 157 47 59 34 233 41 219 73 37 251 194 15 253 75 145 96 80 39 179 249 202 159 83 209 225 250 7 69 218 6 118 30 4 223 205 91 10 122 203 150 202 99 38 192 105 76 100 117 19 25 131 17 60 251 77 246 242 80 163 13 138 36 213 200 135 216 173 92 32 9 122 53 250 80 128 6 139 49 94
本质上,代码将获取您的种子(任何有效字符串)并重复对其进行哈希处理,从而生成 0 到 255 之间的整数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)