gpt4 book ai didi

python - 在 Numpy 中生成唯一的随机值

转载 作者:行者123 更新时间:2023-12-04 09:38:15 27 4
gpt4 key购买 nike

我尝试使用 np.random.randint 生成大量唯一的随机值,但它返回的重复值很少。

我有以下数据集

District    Prefix  Quota       
A 98426 783
A 98427 223
A 98446 127
A 98626 51
B 98049 167
B 98079 153
B 98140 120
B 98159 139
B 98169 182
B 98249 86
B 98426 588
B 98446 96
C 98049 104
C 98060 68
C 98149 65
C 98150 68
C 98159 86
C 98160 80
C 98169 113


重现代码:
import pandas as pd
df = pd.DataFrame([
['A', 98426, 783],
['A', 98427, 223],
['A', 98446, 127],
['A', 98626, 51],
['B', 98049, 167],
['B', 98079, 153],
['B', 98140, 120],
['B', 98159, 139],
['B', 98169, 182],
['B', 98249, 86],
['B', 98426, 588],
['B', 98446, 96],
['C', 98049, 104],
['C', 98060, 68],
['C', 98149, 65],
['C', 98150, 68],
['C', 98159, 86],
['C', 98160, 80],
['C', 98169, 113]
],
columns=['District', 'Prefix', 'Quota'])

我必须创建一个唯一的随机数并将其添加到前缀中。随机值的数量在配额中给出
np.random.seed(1)  # for repeatability 
random=df.Prefix.repeat(df.Quota)*100000 + np.random.randint(0, 99999, df.Quota.sum())

我认为 np.random.randint 给出了唯一的数字,但是在生成大约 18000 个数字时,它给出了大约 200 个重复数字。
最终我尝试了 random.sample 并解决了问题。但我想使用 np.random.randit 生成唯一数字,因为我可以更改 np.random.seed(n) 中的种子,并且可以通过更改种子创建另一组不同于第一组的唯一数字。

最佳答案

您将无法直接使用 np.random.randint ,因为它不提供不放回随机抽样的可能性。但是 np.random.choice 做。并且通过指定随机种子,您可以重现生成的序列,该序列将包含在 range(99999) 范围内的随机均匀采样分布数组中。 :

np.random.seed(2)  
numbers = np.random.choice(range(99999), size=df.Quota.sum(), replace=False)
random = df.Prefix.repeat(df.Quota)*100000 + numbers
len(random)==random.nunique()
# True

关于python - 在 Numpy 中生成唯一的随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62444587/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com