Подтвердить что ты не робот

Random.seed(): Что он делает?

Я немного запутался в том, что random.seed() делает в Python. Например, почему приведенные ниже испытания делают то, что они делают (последовательно)?

>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7

Я не мог найти хорошую документацию по этому вопросу.

4b9b3361

Ответ 1

Генераторы псевдослучайных чисел работают, выполняя некоторую операцию над значением. Обычно это значение является предыдущим числом, генерируемым генератором. Однако при первом использовании генератора прежнего значения нет.

Посещение генератора псевдослучайных чисел дает ему его первое "предыдущее" значение. Каждое начальное значение будет соответствовать последовательности генерируемых значений для данного генератора случайных чисел. То есть, если вы даете одно и то же семя дважды, вы получаете одну и ту же последовательность чисел дважды.

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

Ответ 2

Все остальные ответы, похоже, не объясняют использование random.seed(). Вот простой пример (источник):

import random
random.seed( 3 )
print "Random number with seed 3 : ", random.random() #will generate a random number 
#if you want to use the same random number once again in your program
random.seed( 3 )
random.random()   # same random number as before

Ответ 3

>>> random.seed(9001)   
>>> random.randint(1, 10)  
1     
>>> random.seed(9001)     
>>> random.randint(1, 10)    
1           
>>> random.seed(9001)          
>>> random.randint(1, 10)                 
1                  
>>> random.seed(9001)         
>>> random.randint(1, 10)          
1     
>>> random.seed(9002)                
>>> random.randint(1, 10)             
3

Вы попробуете это. Пусть say "random.seed" дает значение генератору случайных величин ( "random.randint()" ), который генерирует эти значения на основе этого семени. Одним из обязательных свойств случайных чисел является то, что они должны быть воспроизводимыми. Как только вы помещаете одно и то же семя, вы получаете одну и ту же картину случайных чисел. Таким образом, вы генерируете их с самого начала. Вы даете другое семя, которое начинается с другого начального (выше 3).

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

Ответ 4

Случайное число генерируется некоторой операцией над предыдущим значением.

Если предыдущее значение отсутствует, текущее время автоматически обновляется как предыдущее значение. Мы можем предоставить это предыдущее значение самостоятельно, используя random.seed(x) где x может быть любым числом или строкой и т.д.

Следовательно, random.random() самом деле не является идеальным случайным числом, его можно предсказать с помощью random.seed(x).

import random 
random.seed(45)            #seed=45  
random.random()            #1st rand value=0.2718754143840908
0.2718754143840908  
random.random()            #2nd rand value=0.48802820785090784
0.48802820785090784  
random.seed(45)            # again reasign seed=45  
random.random()
0.2718754143840908         #matching with 1st rand value  
random.random()
0.48802820785090784        #matching with 2nd rand value

Следовательно, генерация случайного числа на самом деле не случайна, потому что она работает на алгоритмах. Алгоритмы всегда дают один и тот же вывод на основе одного и того же ввода. Это означает, что это зависит от стоимости семени. Таким образом, чтобы сделать его более случайным, для seed() автоматически назначается время.

Ответ 5

Seed() can be used for later use ---

Example:
>>> import numpy as np
>>> np.random.seed(12)
>>> np.random.rand(4)
array([0.15416284, 0.7400497 , 0.26331502, 0.53373939])
>>>
>>>
>>> np.random.seed(10)
>>> np.random.rand(4)
array([0.77132064, 0.02075195, 0.63364823, 0.74880388])
>>>
>>>
>>> np.random.seed(12) # When you use same seed as before you will get same random output as before
>>> np.random.rand(4)
array([0.15416284, 0.7400497 , 0.26331502, 0.53373939])
>>>
>>>
>>> np.random.seed(10)
>>> np.random.rand(4)
array([0.77132064, 0.02075195, 0.63364823, 0.74880388])
>>>

Ответ 6

В этом случае случайный случай на самом деле псевдослучайный. Учитывая семя, он будет генерировать числа с равным распределением. Но с тем же семенем он будет генерировать одну и ту же последовательность чисел каждый раз. Если вы хотите, чтобы он изменился, вам нужно будет изменить свое семя. Многим людям нравится генерировать семя, основанное на текущем времени или что-то в этом роде.

Ответ 7

# Simple Python program to understand random.seed() importance

import random

random.seed(10)

for i in range(5):    
    print(random.randint(1, 100))

Выполните вышеуказанную программу несколько раз...

1-я попытка: печатает 5 случайных чисел в диапазоне от 1 до 100

2-я попытка: печатает те же 5 случайных чисел, которые появились в приведенном выше исполнении

3-я попытка: то же самое

.....Скоро

Объяснение: Каждый раз, когда мы запускаем вышеупомянутую программу, мы устанавливаем начальное значение в 10, тогда случайный генератор принимает это как опорную переменную. И затем, выполнив некоторую предопределенную формулу, он генерирует случайное число.

Следовательно, установка seed в 10 при следующем выполнении снова устанавливает номер ссылки на 10, и снова начинается то же самое поведение...

Как только мы сбрасываем значение семени, оно дает те же самые растения.

Примечание: измените начальное значение и запустите программу, вы увидите случайную последовательность, отличную от предыдущей.

Ответ 8

Imho, он используется для генерации того же результата случайного курса, когда вы снова используете random.seed(samedigit).

In [47]: random.randint(7,10)

Out[47]: 9


In [48]: random.randint(7,10)

Out[48]: 9


In [49]: random.randint(7,10)

Out[49]: 7


In [50]: random.randint(7,10)

Out[50]: 10


In [51]: random.seed(5)


In [52]: random.randint(7,10)

Out[52]: 9


In [53]: random.seed(5)


In [54]: random.randint(7,10)

Out[54]: 9

Ответ 9

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

# testing random.seed()

import random

def equalityCheck(l):
    state=None
    x=l[0]
    for i in l:
        if i!=x:
            state=False
            break
        else:
            state=True
    return state


l=[]

for i in range(1000):
    random.seed(10)
    l.append(random.random())

print "All elements in l are equal?",equalityCheck(l)

Ответ 10

Вот мое понимание. Каждый раз, когда мы устанавливаем начальное значение, генерируется "метка" или "ссылка". Следующий вызов random.function присоединяется к этой "метке", поэтому в следующий раз, когда вы вызовете то же самое начальное значение и random.function, он даст вам тот же результат.

np.random.seed( 3 )
print(np.random.randn()) # output: 1.7886284734303186

np.random.seed( 3 )
print(np.random.rand()) # different function. output: 0.5507979025745755

np.random.seed( 5 )
print(np.random.rand()) # different seed value. output: 0.22199317108973948

Ответ 11

Установите seed(x) перед генерацией набора случайных чисел и используйте то же начальное число для создания одинакового набора случайных чисел. Полезно в случае воспроизведения вопросов.

>>> from random import *
>>> seed(20)
>>> randint(1,100)
93
>>> randint(1,100)
88
>>> randint(1,100)
99
>>> seed(20)
>>> randint(1,100)
93
>>> randint(1,100)
88
>>> randint(1,100)
99
>>>