как узнать семя для случайного набора данных в python [duplicate]

добавьте System.Data.Linq.SqlClient в ваш список использования или импорта, затем попробуйте:

  var results = from x в данных, где SqlMethods.Like (x.SearchField, "% something%  например% this% ") выберите x;   
30
задан mix 16 February 2011 в 06:09
поделиться

7 ответов

Невозможно получить автоматическое семя обратно от генератора. Я обычно генерирую такие семена:

  seed = random.randrange (sys.maxsize) rng = random.Random (seed) print («Seed was:», seed)  [  ! d3] 

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

32
ответ дан Zooba 16 August 2018 в 02:09
поделиться
  • 1
    PRNG автоматически высевается из PRNG ОС по умолчанию (через os.urandom ), поэтому это почти всегда не нужно. – Glenn Maynard 16 February 2011 в 08:00
  • 2
    @Glenn Maynard Если вы не хотите знать, что такое семя, вы можете позже воспроизвести сгенерированную последовательность. – Zooba 16 February 2011 в 10:40
  • 3
    В Python отсутствует random.getseed () , но это гораздо менее болезненно, чем эквивалент в Java . – smci 9 February 2012 в 02:10
  • 4
    В Python3 + используется sys.maxsize, поскольку sys.maxint удален – Brendan Maguire 2 March 2016 в 15:46
  • 5
    как ваш путь посева сравнивается с: seed = ord (os.urandom (1)) ? – Charlie Parker 30 March 2018 в 00:03

Поскольку никто не упомянул, что обычно наилучшая случайная выборка, которую вы могли бы получить на любом языке программирования, генерируется через операционную систему, я должен предоставить следующий код:

  random_data = os.urandom (  [] D5] 

Источник: https: // www. quora.com/What-is-the-best-way-to-generate-random-seeds-in-python


со значением 8, похоже, создает вокруг того же количество цифр как sys.maxsize для меня.

  & gt; & gt; & gt; & gt; & gt;  int.from_bytes (os.urandom (8), byteorder = "large") 17520563261454622261 & gt; & gt; & gt; & gt; & gt; & gt; & gt;  sys.maxsize 9223372036854775807 & gt; & gt; & gt;   
0
ответ дан Charlie Parker 16 August 2018 в 02:09
поделиться

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

Я бы просто использовал 0 в качестве семени, если вы хотите иметь одинаковые случайные числа каждый раз или настроить i.

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

EDIT: Как отмечено эфемерным, внутреннее состояние генератора случайных чисел может быть более сложным, чем семя, в зависимости от его реализации.

1
ответ дан Daniel 16 August 2018 в 02:09
поделиться
  • 1
    Семена фактически используются для создания внутреннего состояния генератора. Бывает множество состояний, которые достигаются путем вызова random () , но не могут быть прямым результатом посева. Поэтому неточно сказать, что семя является внутренней переменной - оно просто заселяет исходное состояние. – ephemient 16 February 2011 в 06:01
  • 2
    О, я думал, что длина семени будет означать длину возможных внутренних состояний. Спасибо за исправление. – Daniel 16 February 2011 в 06:33

Если вы «установили» семя, используя random.seed (None) , рандомизатор автоматически высевается как функция в системное время. Однако вы не можете получить доступ к этому значению, как вы заметили. Что я делаю, когда хочу рандомизировать, но все еще знаю, что это семя:

  tim = datetime.datetime.now () randseed = tim.hour * 10000 + tim.minute * 100 + tim  .second random.seed (randseed)  

note: причина, по которой я предпочитаю это использовать time.time () , предложенную @Abdallah, заключается в том, что таким образом randseed является удобочитаемым человеком и сразу понятным, что часто имеет большие преимущества. Компоненты даты и даже микросегменты также могут быть добавлены по мере необходимости.

2
ответ дан Dr. Drew 16 August 2018 в 02:09
поделиться

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

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

  import random old_state = random.getstate () print random.random () random.setstate (old_state) print random.random () # Вы также можете восстановить состояние в свои собственные  экземпляр PRNG, чтобы избежать проблем с потоковой безопасностью при использовании глобального экземпляра по умолчанию.  prng = random.Random () prng.setstate (old_state) print prng.random ()  

Результаты getstate можно, конечно, мариновать, если вы хочу сохранить его настойчиво.

http://docs.python.org/library/random.html#random.getstate

22
ответ дан Glenn Maynard 16 August 2018 в 02:09
поделиться
  • 1
    Это не будет воспроизводить последовательность, это просто позволит вам продолжить с того места, где вы остановились в прошлый раз. Если вы хотите воспроизвести всю последовательность с самого начала, вам нужно знать начальное значение. – Zooba 16 February 2011 в 10:41
  • 2
    @ Zooba: Это эквивалентно. Чтобы воспроизвести всю последовательность из пирога, просто сохраните состояние PRNG в этой точке. – Glenn Maynard 16 February 2011 в 20:06
  • 3
    Учитывая контекст вопроса (необязательный посевной выбор), хранение относительно большого государственного кортежа далеко не оптимально. Одно значение семени гораздо легче встраивается в данные конфигурации, и если вам нужен безопасный PRNG, вы не должны сохранять семя (или состояние) в любом случае. – Zooba 16 February 2011 в 21:56
  • 4
    Это технически правильно, но подход Zooba более удобен для использования в целях OP. – smci 9 February 2012 в 02:07
  • 5
    @smci: Его подход бесполезно небезопасен, значительно уменьшая количество случайности. (И идея о том, что вы не должны сохранять состояние безопасного PRNG, - это бессмыслица - вы можете также сказать, что вам не следует хранить личные ключи для серверов HTTPS.) – Glenn Maynard 21 February 2012 в 18:49

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

  SEED = int (time.time ()) random.seed (SEED) [  ! d0] 
1
ответ дан Kampai 16 August 2018 в 02:09
поделиться

Вы можете подклассифицировать random.Random, переписать метод seed () так же, как это делает python (v3.5 в этом примере), но сохранить начальное значение в переменной перед вызовом super ():

   import random class Random (random.Random): def seed (self, a = None, version = 2): from os import urandom as _urandom from hashlib import sha512 as _sha512, если a None: try: # Семя достаточно  байты, чтобы охватить пространство состояний 19937 бит # для Mersenne Twister a = int.from_bytes (_urandom (2500), 'big'), за исключением NotImplementedError: время импорта a = int (time.time () * 256) # использовать дробные секунды, если  version == 2: if isinstance (a, (str, bytes, bytearray)): if isinstance (a, str): a = a.encode () a + = _sha512 (a) .digest () a = int.from_bytes  (a, 'big') self._current_seed = a super (). seed (a) def get_seed (self): return self._current_seed  

Если вы проверите его, первое случайное значение генерируется с новым семенем, а второе значение, сгенерированное с использованием одного и того же семени (с помощью метода get_seed (), который мы создали) будет равным: [!d 3]

  & gt; & gt; & gt; & gt;  rnd1 = Random () & gt; & gt; & gt; & gt;  seed = rnd1.get_seed () & gt; & gt; & gt; & gt;  v1 = rnd1.randint (1, 0x260) & gt; & gt; & gt; & gt; & gt; & gt;  rnd2 = Random (seed) & gt; & gt; & gt; & gt; & gt;  v2 = rnd2.randint (1, 0x260) & gt; & gt; & gt; & gt; & gt; & gt;  v1 == v2 True  

Если вы храните / копируете огромное значение семени и пытаетесь использовать его в другом сеансе, генерируемое значение будет точно таким же.

6
ответ дан Lucas Siqueira 16 August 2018 в 02:09
поделиться
  • 1
    Не многие оценили подход. Это объяснение удивительно. – Doogle 29 March 2018 в 08:54
Другие вопросы по тегам:

Похожие вопросы: