Короткий ответ: вы просто не можете (по крайней мере, не вообще).
Mersenne Twister ГСЧ, используемый NumPy имеет 2 -1 возможные внутренние состояния, в то время как один 64-битное целое имеет только 2 возможные значения. Поэтому невозможно сопоставить каждое состояние RNG с уникальным целым семенем.
Вы можете получить и установить внутреннее состояние ГСЧ непосредственно с помощью np.random.get_state
и np.random.set_state
. Вывод get_state
является кортежем, вторым элементом которого является массив из (624,)
из 32-битных целых чисел. Этот массив имеет более чем достаточно бит для представления каждого возможного внутреннего состояния RNG (2 624 * 32> 2 -1).
Кортеж, возвращенный get_state
, может использоваться как семена, чтобы создать воспроизводимые последовательности случайных чисел. Например:
import numpy as np
# randomly initialize the RNG from some platform-dependent source of entropy
np.random.seed(None)
# get the initial state of the RNG
st0 = np.random.get_state()
# draw some random numbers
print(np.random.randint(0, 100, 10))
# [ 8 76 76 33 77 26 3 1 68 21]
# set the state back to what it was originally
np.random.set_state(st0)
# draw again
print(np.random.randint(0, 100, 10))
# [ 8 76 76 33 77 26 3 1 68 21]
Не могли бы вы объяснить, что вы подразумеваете под * «использовать текущее семя для переноса на следующую итерацию процесса» *? Есть ли причина, по которой вы не можете просто использовать комбинацию 'np.random.get_state' и' np.random.set_state', или же передать экземпляр 'np.random.RandomState' для отслеживания внутренних состояние ГСЧ? –
@ali_m Если я исправил семя, я знаю, какое семя использовать для воспроизведения результата. Однако, если я не зафиксировал семя, как я могу узнать, какое семя используется? – Mast
Почему ответ на ваш вопрос сказал: «Короткий ответ: вы просто не можете (по крайней мере, не в общем случае)». Однако вы приняли ответ. Удалось ли ему ответить на ваш вопрос или нет? Я запутался. –