如何在使用Python的numpy random choice时指定一个随机种子?

c6ubokkw  于 2022-12-23  发布在  Python
关注(0)|答案(3)|浏览(413)

我有一个包含四个字符串的列表。然后在Pandas Dataframe 中,我想创建一个变量,从列表中随机选择一个值,并分配到每一行。我使用的是numpy的随机选择,但阅读他们的文档,没有种子选项。我如何指定随机种子到随机分配,以便每次的随机分配都是相同的?

service_code_options = ['899.59O', '12.42R', '13.59P', '204.68L']
df['SERVICE_CODE'] = [np.random.choice(service_code_options ) for i in df.index]
von4xj4u

von4xj4u1#

您需要在numpy.random.seed之前定义它,也不需要列表解析,因为可以使用numpy.random.choice和参数size

np.random.seed(123)

df = pd.DataFrame({'a':range(10)})

service_code_options = ['899.59O', '12.42R', '13.59P', '204.68L']
df['SERVICE_CODE'] = np.random.choice(service_code_options, size=len(df))
print (df)
   a SERVICE_CODE
0  0       13.59P
1  1       12.42R
2  2       13.59P
3  3       13.59P
4  4      899.59O
5  5       13.59P
6  6       13.59P
7  7       12.42R
8  8      204.68L
9  9       13.59P
wbrvyc0a

wbrvyc0a2#

文件numpy.random.seed

np.random.seed(this_is_my_seed)

可以是整数或整数列表

np.random.seed(300)

或者

np.random.seed([3, 1415])

示例

np.random.seed([3, 1415])

service_code_options = ['899.59O', '12.42R', '13.59P', '204.68L']
np.random.choice(service_code_options, 3)

array(['899.59O', '204.68L', '13.59P'], dtype='<U7')

注意,我向choice函数传递了一个3,以指定数组的大小。
numpy.random.choice

yv5phkfx

yv5phkfx3#

根据numpy v1.2.4中numpy.random.seed的注解:
最佳实践是使用专用的Generator示例,而不是直接在random模块中公开的随机变量生成方法。
这样的生成器是使用np.random.default_rng构造的。
因此,当前的最佳实践是使用带有种子的np.random.default_rng来构建生成器,而不是np.random.seed,该生成器可进一步用于可重现的结果。
结合jezrael's answer和当前的最佳实践,我们拥有:

import pandas as pd 
import numpy as np 

rng = np.random.default_rng(seed=121)

df = pd.DataFrame({'a':range(10)})

service_code_options = ['899.59O', '12.42R', '13.59P', '204.68L']
df['SERVICE_CODE'] = rng.choice(service_code_options, size=len(df))

print(df)
a SERVICE_CODE
0  0       12.42R
1  1       13.59P
2  2       12.42R
3  3       12.42R
4  4      899.59O
5  5      204.68L
6  6      204.68L
7  7       13.59P
8  8       12.42R
9  9       13.59P

相关问题