Уникальная переменная с несколькими set.seed () - PullRequest
0 голосов
/ 26 февраля 2020

Я хотел бы сгенерировать случайное число 193 раза, но установить начальное число, чтобы впоследствии я мог получить одно и то же число для каждого экземпляра. Поскольку я не смог найти функцию для установки начального числа X раз, я написал следующий код:

rand_list_raw = []
val_length = int(len(all_articles)*0.15)
seeds = list(range(0,val_length))
index = 0

while len(rand_list_raw) < val_length:  
        seed = seeds[index]
        random.seed(seed)
        rand_num = random.randrange(0, 1290, 1)
        rand_list_raw.append(rand_num)
        index += 1

Проверяя длину уникальных переменных в rand_list_raw, я пришел к выводу, что random.seed() имеет отображение многие-к-одному, так что несколько экземпляров случайного начального числа с разными числами могут привести к одному и тому же результату. Это на самом деле имеет смысл, поскольку диапазон входных переменных бесконечен, а диапазон выходных переменных конечен.

len(set(rand_list_raw))

Есть ли способ гарантировать разные цифры (кроме жесткого кодирования)?

Ps. Я знаю, что я мог бы просто создать список с уникальными случайными числами в пределах диапазона и экспортировать его. Но дело не в этом.

1 Ответ

1 голос
/ 26 февраля 2020

Зачем сеять это n раз? Вы можете просто выйти из начального семени и всегда иметь один и тот же порядок. Подумайте:

rand_dict = {}
rand_list = []
val_length = int(len(all_articles)*0.15)
seed = 1 #whatever you want
step = 0
random.seed(seed)
while len(rand_list_raw) < val_length: 
    step+=1
    rand_num = random.randrange(0, 1290, 1)
    try:
        test = rand_dict[rand_num] #check if key exists if it does we dont do anything
    except KeyError:
        rand_list.append(rand_num)
        rand_dict[rand_num] = step

Тогда, если вы хотите снова получить те же цифры. Просто начните заново с тем же начальным числом и повторите через использование генератора для того же числа шагов, которое хранится в dict.

Пример, чтобы вернуть свой номер. Используя seed = 1, на шаге = 5 значение равно 241.

random.seed(seed)
step = rand_dict[241]
i = 0
while(i<step)
    buf = random.randrange(0,1290,1)
    i+=1
print(buf)
>> 241
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...