我可以创建一个本地的numpy随机种子吗? [英] Can I create a local numpy random seed?
本文介绍了我可以创建一个本地的numpy随机种子吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有一个功能foo
,它使用np.random
功能.
我想控制foo
使用的种子,但实际上不更改函数本身.
我该怎么做?
There is a function, foo
, that uses the np.random
functionality.
I want to control the seed that foo
uses, but without actually changing the function itself.
How do I do this?
基本上我想要这样的东西:
Essentially I want something like this:
bar() # should have normal seed
with np.random.seed(0): # Doesn't work
foo()
bar() # should have normal seed
类似的解决方案 此:
Solutions like this:
rng = random.Random(42)
number = rng.randint(10, 20)
在这种情况下不起作用,因为我无权访问foo
的内部工作原理(或者我错过了什么吗?).
doesn't work in this case, as I don't have access to the inner workings of foo
(or am I missing something??).
推荐答案
您可以将全局随机状态保留在一个临时变量中,并在函数完成后将其重置:
You could keep the global random state in a temporary variable and reset it once your function is done:
import contextlib
import numpy as np
@contextlib.contextmanager
def temp_seed(seed):
state = np.random.get_state()
np.random.seed(seed)
try:
yield
finally:
np.random.set_state(state)
演示:
>>> np.random.seed(0)
>>> np.random.randn(3)
array([1.76405235, 0.40015721, 0.97873798])
>>> np.random.randn(3)
array([ 2.2408932 , 1.86755799, -0.97727788])
>>> np.random.seed(0)
>>> np.random.randn(3)
array([1.76405235, 0.40015721, 0.97873798])
>>> with temp_seed(5):
... np.random.randn(3)
array([ 0.44122749, -0.33087015, 2.43077119])
>>> np.random.randn(3)
array([ 2.2408932 , 1.86755799, -0.97727788])
这篇关于我可以创建一个本地的numpy随机种子吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文