假设您有两个类似的功能:
import numpy as np
def function_1(seed):
res = []
np.random.seed(seed)
for i in range(10):
res.append(np.random.rand())
return res
def function_2(seed):
res = []
np.random.seed(seed)
for i in range(10):
a = np.random.rand() # necessary!
res.append(np.random.rand())
return res
它们基本相同,只是在function_2
中,您需要为for循环的每次运行生成一个附加的随机数。
现在
x = function_1(1)
y = function_2(1)
x == y
>>> False
但是,您需要确保两个函数返回的res
相同。是否有比将function_1
更改为以下更好的方法?
def function_3(seed):
res = []
np.random.seed(seed)
for i in range(10):
np.random.rand()
res.append(np.random.rand())
return res
然后
z = function_3(1)
y == z
>>> True
答案 0 :(得分:2)
对必须相同的序列使用专用的RandomState:
def function_2(seed):
res = []
random1 = np.random.RandomState(seed)
for i in range(10):
a = np.random.rand() # uses global state, no explicit seed
res.append(random1.rand())
return res
顺便说一句,您确实应该尝试res = random1.rand(10)
来做到无循环。会更快。