如何在使用 Python 的 numpy 随机选择时指定随机种子?



我有一个包含四个字符串的列表。然后在 Pandas 数据帧中,我想创建一个变量,从此列表中随机选择一个值并分配给每一行。我正在使用 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]

你需要在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

文档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

根据 numpy v1.2.4 中numpy.random.seed的注释:

最佳做法是使用专用的生成器实例,而不是直接在随机模块中公开的随机变量生成方法。

这样的生成器是使用np.random.default_rng构造的。

因此,目前的最佳实践不是np.random.seed,而是使用带有种子的np.random.default_rng来构建生成器,该生成器可以进一步用于可重复的结果。

结合 Jezrael 的答案和当前的最佳实践,我们有:

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

最新更新