【问题标题】:Generate numpy array of random integers within a range and some fixed integers outside the defined range生成范围内随机整数的numpy数组和定义范围外的一些固定整数
【发布时间】:2021-07-20 09:12:50
【问题描述】:

我想组合两个随机数生成器。

我想生成 size = 20 个介于 [-5,5] 和固定整数 -999 之间的随机整数。

我尝试了以下代码:

from random import randint, choice  
import numpy as np
np.random.seed(1)
dd = np.array([choice([randint(-999,-999),randint(-5,5)]) for _ in range(20)])
print(dd)

结果:

[-999 -999 -999   -4 -999 -999   -4 -999 -999    3    5   -3    2    0
   -1 -999 -999   -5 -999   -4]

有没有更好的方法来生成随机整数?由于上下限相同,当前代码的结果有很多-999。

【问题讨论】:

    标签: python python-3.x numpy random


    【解决方案1】:

    目前它在每次迭代时在 -999 和 -5 和 5 之间的随机数之间进行选择。因此,您预计 50% 的结果为 -999。

    一种方法是首先定义一个选择列表

    choices = list(range(-5,5))+ [-999]
    

    然后,使用 np.random.choice 而不是 for 循环列表理解进行采样。使用 size = 20 您可以设置要选择的数量。

    dd = np.random.choice(choices, size = 20)
    

    【讨论】:

      【解决方案2】:

      您的解决方案产生了大约 50% 的案例 -999 和 [-5, 5] 中的数字。这是因为选择必须在 -999 和 X 之间进行选择(其中 X 是先前由 randint 定义的数字,介于 -5 和 5 之间)。如果您希望每个数字都具有相同的被选中概率,请尝试以下建议的解决方案:

      lst = [i for i in range(-5, 6)] + [-999]
      dd = [choice(lst) for _ in range(20)]
      

      列表lst中的一个数字被选择的概率是1/12~8%

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-21
        • 2011-02-02
        • 2018-12-17
        • 2010-12-04
        • 2015-10-24
        • 2022-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多