始终创建相同的随机numpy的阵列

问题描述 投票:81回答:4

我在等待另一个显影剂完成的一段代码,将返回的形状(100,2000)的NP阵列的任-1,0值,或1。

在此期间,我想随机创建的相同特性的数组,所以我可以在我的开发和测试一个良好的开端。问题是,我想这个随机创建数组是相同的每一次,让我不反对,保持每个我重新运行我的处理时间会改变其值的阵列测试。

我可以创建数组这样的,但有一种方法来创建它,这样它的每一次一样。我可以泡制的对象和unpickle它,但不知道是否有另一种方式。

r = np.random.randint(3, size=(100, 2000)) - 1
python random numpy
4个回答
78
投票

简单地用一个固定值种子随机数发生器,例如

numpy.random.seed(42)

通过这种方式,您总能获得相同的随机数序列。


173
投票

与您所选择的种子创建自己的numpy.random.RandomState()的实例。不要使用numpy.random.seed()除了工作没有让你通过在你自己的RandomState例如约呆板库。

[~]
|1> from numpy.random import RandomState

[~]
|2> prng = RandomState(1234567890)

[~]
|3> prng.randint(-1, 2, size=10)
array([ 1,  1, -1,  0,  0, -1,  1,  0, -1, -1])

[~]
|4> prng2 = RandomState(1234567890)

[~]
|5> prng2.randint(-1, 2, size=10)
array([ 1,  1, -1,  0,  0, -1,  1,  0, -1, -1])

3
投票

如果你正在使用其他的功能依靠随机状态,你不能只是设置和整体种子,而应该创建一个函数来生成随机数的列表,并设置种子作为函数的参数。这不会干扰代码中的任何其他随机生成:

# Random states
def get_states(random_state, low, high, size):
    rs = np.random.RandomState(random_state)
    states = rs.randint(low=low, high=high, size=size)
    return states

# Call function
states = get_states(random_state=42, low=2, high=28347, size=25)

1
投票

了解什么是随机生成的种子,当/如何在代码中设置(例如检查为here的种子的数学含义一个很好的解释)是很重要的。

对于您需要通过执行来设置种子:

random_state = np.random.RandomState(seed=your_favorite_seed_value)

它是那么重要,从random_state,而不是从np.random产生的随机数。即你应该做:

random_state.randint(...)

代替

np.random.randint(...) 

这将创造RandomState()的一个新实例,基本上使用您的计算机的内部时钟设置种子。


1
投票

我只是想澄清关于@Robert克恩答案的东西只是在不明确的情况下。即使你使用RandomState你就必须每次在罗伯特的例子调用像numpy的随机方法,否则,你将得到下面的结果时进行初始化。

Python 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 19:07:31) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> prng = np.random.RandomState(2019)
>>> prng.randint(-1, 2, size=10)
array([-1,  1,  0, -1,  1,  1, -1,  0, -1,  1])
>>> prng.randint(-1, 2, size=10)
array([-1, -1, -1,  0, -1, -1,  1,  0, -1, -1])
>>> prng.randint(-1, 2, size=10)
array([ 0, -1, -1,  0,  1,  1, -1,  1, -1,  1])
>>> prng.randint(-1, 2, size=10)
array([ 1,  1,  0,  0,  0, -1,  1,  1,  0, -1])
© www.soinside.com 2019 - 2024. All rights reserved.