我有一个脚本使用np.random.randint
与np.random.seed(0)
播种。现在我想知道如何通过创建一个单独的rng对象rng = np.random.default_rng(0)
来获得相同的数字。我天真地以为这两种方式是相同的,但显然情况并非如此。原因是我试图从使用内置方法的一些脚本中重现一些错误,但不幸的是,现在另一个脚本也影响了内置RNG的状态,这就是为什么我想解耦这些。
谁能告诉我我要做什么才能从rng
中得到与我从np.random
中得到的相同的数字?
import numpy as np
def builtin(seed=0):
np.random.seed(seed)
print(np.random.randint(0, 10, 5))
def default(seed=0):
rng = np.random.default_rng(seed)
print(rng.integers(0, 10, 5))
# unfortunately do not produce the same results:
builtin()
default()
numpy.random.default_rng
使用新样式的生成器API。这在很大程度上优于旧的功能,并且应该优先在新代码中使用,除非您有特定的理由不使用它,但它与旧的API不向后兼容。
旧API创建新RNG对象的方法是numpy.random.RandomState
:
rng = np.random.RandomState(0)
print(rng.randint(0, 10, 5))