Python 使numpy.random生成的数字在不同函数中保持一致
假设您有两个类似的函数:Python 使numpy.random生成的数字在不同函数中保持一致,python,numpy,random,Python,Numpy,Random,假设您有两个类似的函数: 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 ra
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
它们基本相同,只是在函数_2
中,需要为for循环的每次运行生成额外的随机数
现在,
但是,您需要确保返回的res
对于这两个函数是相同的。是否有比将功能_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
对必须相同的序列使用专用的随机状态:
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)
在不使用循环的情况下执行此操作。它会更快。对必须相同的序列使用专用的随机状态:
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)
在不使用循环的情况下执行此操作。速度会更快。我该怎么做?我误解了你的问题。你做这件事的方式几乎是最简单的方式。IMO更干净的方法是用np.random.RandomState
替换np.random.seed
,我同意。生成np.random.RandomState的两个实例,并在append中使用其中一个实例,在附加随机调用中使用另一个实例。您可以在一个调用之前立即保存该状态,将该状态传递出函数,然后在另一个函数中使用该状态重置。这种方法更加通用和灵活,因此,例如,一个函数不需要对另一个函数了解太多(例如,它调用random的次数);它适用于多个函数,涉及较少的对随机
的调用等。感谢您的所有建议。我将彻底查看np.random.RandomState
的文档,并思考什么解决方案最适合我的应用程序。我该怎么做?我误解了你的问题。你做这件事的方式几乎是最简单的方式。IMO更干净的方法是用np.random.RandomState
替换np.random.seed
,我同意。生成np.random.RandomState的两个实例,并在append中使用其中一个实例,在附加随机调用中使用另一个实例。您可以在一个调用之前立即保存该状态,将该状态传递出函数,然后在另一个函数中使用该状态重置。这种方法更加通用和灵活,因此,例如,一个函数不需要对另一个函数了解太多(例如,它调用random的次数);它适用于多个函数,涉及较少的对随机
的调用等。感谢您的所有建议。我将仔细查看np.random.RandomState
的文档,并考虑什么解决方案最适合我的应用程序。感谢您提供有关指定random.rand
输出的提示。我只是试图提出一种类似于我实际问题的结构,并认为只要问题得到解决,如果这里的示例效率低下,这就不是问题。感谢您提供了指定random.rand
输出的提示。我只是试图提出一种与我真正的问题类似的结构,并且认为只要问题得到解决,如果这里的例子是无效的,那就不是问题。