Условный генератор случайных чисел python numpy - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу создать генератор случайных чисел, но с условием.

код подобен приведенному ниже;

s_weights = []
num = 3
limit = 50000
np.random.seed(101)

for x in range(limit):
    weights = np.random.random(num)
    weights /= np.sum(weights)
    s_weights.append(weights)

он возвращает мне 50 000 списков массивов из 3 весов (3,)как показано ниже

0.429134083359603413e-01 5.115615408184341906e-01 2.552505084560561729e-02

Я хочу ограничить первый вес с правилом> = 0,60

первый вес должен изменяться в диапазоне от 0,60 до 1,00, а два других должны изменяться в диапазоне от 0,00 до 1,00

как я могу изменить код?

заранее спасибо

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете масштабировать первый вес, а затем сгенерировать другие веса, чтобы учесть ограничение суммирования до 1. Обновленный код приведен ниже:

import numpy as np
s_weights = []
num = 3
limit = 50000
np.random.seed(101)
offset = 0.6

for x in range(limit):
    # By default all the weights go from 0 to 1
    weights = np.random.random(num)
    # shift and scale the first one to go from 0.6 to 1
    # in the case offset is 0.6 then it is x*0.4 + 0.6, which for 0 in 0 to 1 always falls in 0.6 to 1
    weights[0] = weights[0]*(1-offset) + offset 
    # Scales the second weight respecting that the sum must be 1
    second_max = 1-weights[0]
    weights[1] = weights[1]*second_max
    # third component should be equal to the value we need to complete 1
    weights[2] = 1-weights[0]-weights[1]
    s_weights.append(weights)
print(weights)
print(sum(weights))

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

[0.84739308 0.11863514 0.03397177]
1.0
...