Создайте список целых чисел размером n, среднее = 20, min = 2 и max = 25 в numpy - PullRequest
0 голосов
/ 03 мая 2020

Я хотел бы создать список целых чисел с размером n, средним значением = 20, минимальным = 2 и максимальным = 25.

И пробовал код ниже. что очень много времени.

# generate service time with mean = 20, min = 2 and max = 25
def gen_avg(n, expected_avg=20, a=2, b=25):
    while True:
        l = np.random.randint(a, b, size=n)
        avg = np.mean(l)

        if avg == expected_avg:
            return l

Пожалуйста, помогите мне с некоторым быстрым методом

1 Ответ

2 голосов
/ 03 мая 2020

Вы можете сгенерировать случайный список, а затем слегка подправить числа, заменив числа, которые больше среднего (если текущее среднее значение слишком низкое), или заменив числа, которые меньше среднего (если текущее среднее слишком высокое). ) вот так

def gen_avg(n, expected_avg=20, a=2, b=25):
    l = np.random.randint(a, b, size=n)
    while True:
        if np.mean(l) == expected_avg:
            break
        while np.mean(l) > expected_avg:
            c = np.random.choice(np.where(l>expected_avg)[0])
            l[c] = np.random.randint(a, expected_avg+1)
        while np.mean(l) < expected_avg:
            c = np.random.choice(np.where(l<expected_avg)[0])
            l[c] = np.random.randint(expected_avg, b)
        return l

Предполагается, что вам нет дела до производства какого-либо особенно интересного дистрибутива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...