我在等待另一个显影剂完成的一段代码,将返回的形状(100,2000)的NP阵列的任-1,0值,或1。
在此期间,我想随机创建的相同特性的数组,所以我可以在我的开发和测试一个良好的开端。问题是,我想这个随机创建数组是相同的每一次,让我不反对,保持每个我重新运行我的处理时间会改变其值的阵列测试。
我可以创建数组这样的,但有一种方法来创建它,这样它的每一次一样。我可以泡制的对象和unpickle它,但不知道是否有另一种方式。
r = np.random.randint(3, size=(100, 2000)) - 1
简单地用一个固定值种子随机数发生器,例如
numpy.random.seed(42)
通过这种方式,您总能获得相同的随机数序列。
与您所选择的种子创建自己的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])
如果你正在使用其他的功能依靠随机状态,你不能只是设置和整体种子,而应该创建一个函数来生成随机数的列表,并设置种子作为函数的参数。这不会干扰代码中的任何其他随机生成:
# 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)
了解什么是随机生成的种子,当/如何在代码中设置(例如检查为here的种子的数学含义一个很好的解释)是很重要的。
对于您需要通过执行来设置种子:
random_state = np.random.RandomState(seed=your_favorite_seed_value)
它是那么重要,从random_state,而不是从np.random产生的随机数。即你应该做:
random_state.randint(...)
代替
np.random.randint(...)
这将创造RandomState()的一个新实例,基本上使用您的计算机的内部时钟设置种子。
我只是想澄清关于@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])