random.seed() 不适用于 np.random.choice()

PiC*_*bed 7 python random numpy

所以我试图生成一个具有所需概率的数字列表;问题是random.seed()在这种情况下不起作用。

M_NumDependent = []

for i in range(61729):
    random.seed(2020)
    n = np.random.choice(np.arange(0, 4), p=[0.44, 0.21, 0.23, 0.12])
    M_NumDependent.append(n)
print(M_NumDependent)
Run Code Online (Sandbox Code Playgroud)

如果有效的话,所需的输出应该是相同的random.seed(),但每次运行时输出都不同。有谁知道是否有一个函数可以完成类似的seed()工作np.random.choice()

Wil*_*sem 9

numpy使用自己的伪随机生成器。np.random.seed(\xe2\x80\xa6)您可以使用\xc2\xa0 [numpy-doc]为 Numpy 随机生成器播种:

\n
np.random.seed(2020)
Run Code Online (Sandbox Code Playgroud)\n

例如:

\n
>>> np.random.seed(2020)\n>>> np.random.choice(np.arange(0, 4), p=[0.44, 0.21, 0.23, 0.12])\n3\n>>> np.random.seed(2020)\n>>> np.random.choice(np.arange(0, 4), p=[0.44, 0.21, 0.23, 0.12])\n3\n>>> np.random.seed(2020)\n>>> np.random.choice(np.arange(0, 4), p=[0.44, 0.21, 0.23, 0.12])\n3\n>>> np.random.choice(np.arange(0, 4), p=[0.44, 0.21, 0.23, 0.12])\n2\n
Run Code Online (Sandbox Code Playgroud)\n

正如你所看到的,我们每次都会选择3,而如果我们不为随机生成器播种,2则下一个项目是3

\n


Gio*_*ous 5

您不小心设置了random.random.seed()而不是numpy.random.seed().


代替

random.seed(2020)
Run Code Online (Sandbox Code Playgroud)

使用

import numpy as np 


np.random.seed(2020)
Run Code Online (Sandbox Code Playgroud)

并且您的结果将始终是可重复的。