случайность.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
Я не могу найти хорошую документацию по этому. Заранее спасибо!
10 ответов:
генераторы псевдослучайных чисел работают, выполняя некоторую операцию над значением. Обычно это значение является предыдущим числом, генерируемым генератором. Однако при первом использовании генератора Предыдущее значение отсутствует.
заполнение генератора псевдослучайных чисел дает ему первое "Предыдущее" значение. Каждое начальное значение будет соответствовать последовательности сгенерированных значений для заданного генератора случайных чисел. То есть, если вы предоставляете одно и то же семя дважды, вы получаете то же самое последовательность чисел дважды.
Как правило, вы хотите заполнить свой генератор случайных чисел с некоторым значением, которое будет изменять каждое выполнение программы. Например, текущее время является часто используемым семян. Причина, по которой это не происходит автоматически, заключается в том, что если вы хотите, вы можете предоставить определенное семя, чтобы получить известную последовательность чисел.
все остальные ответы, похоже, не объясняют использование random.семя.)( Вот простой пример (источник):
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
>>> 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попробуйте это. Скажем так: "случайно.семя ' дает значение генератору случайных величин ('random.randint ()'), который генерирует эти значения на основе этого семени. Одним из обязательных свойств случайных чисел является то, что они должны быть воспроизводимыми. Как только вы положите одно и то же семя, вы получите тот же шаблон случайных чисел. Так вы создаете их с самого начала снова. Вы даете другое семя, оно начинается с другого инициала (выше 3).
вы дали семя теперь это будет генерировать случайные числа между 1 и 10 один за другим. Таким образом, вы можете принять один набор чисел для одного начального значения.
в этом случае random на самом деле является псевдослучайным. Учитывая семя, оно будет генерировать числа с равным распределением. Но с тем же семенем, он будет генерировать ту же последовательность чисел каждый раз. Если вы хотите, чтобы это изменилось, вам придется изменить свое семя. Многие люди любят генерировать семя на основе текущего времени или что-то в этом роде.
#Simple python programme 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-я попытка: то же самое
.....и так далее
пояснение: каждый раз , когда мы запускаем вышеуказанную программу, мы устанавливаем seed на 10, а затем random generator принимает это как опорную переменную.А затем, сделав некоторые предопределенные формула генерирует случайное число.
следовательно, установка seed в 10 в следующем выполнении снова устанавливает ссылочный номер в 10 и снова начинается то же самое поведение....
Как только мы сбрасываем значение семян дает растения.
Примечание: измените начальное значение и запустите программу,вы увидите другую случайную последовательность, чем предыдущая.
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]) >>>
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
случайное число генерируется некоторой операцией над предыдущим значением.
если нет предыдущего значения, то текущее время как Предыдущее значение автоматически. мы можем предоставить это Предыдущее значение самостоятельно с помощью
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().
вот небольшой тест, который показывает, что кормление
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)
вот мое понимание. Каждый раз, когда мы устанавливаем начальное значение, генерируется "метка" или "ссылка". Следующий случайный.вызов функции прикрепляется к этой "метке", поэтому в следующий раз вы вызываете то же самое начальное значение и случайное.функция, это даст вам тот же результат.
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
Comments