La risposta breve è che semplicemente non è possibile (almeno non in generale).
Il Mersenne Twister RNG utilizzato da NumPy ha 2 -1 possibili stati interni, mentre un singolo intero a 64 bit ha solo 2 valori possibili. È quindi impossibile mappare ogni stato RNG a un seme intero univoco.
È possibile ottenere e impostare lo stato interno del RNG utilizzando direttamente np.random.get_state
e np.random.set_state
. L'output di get_state
è una tupla il cui secondo elemento è una matrice (624,)
di numeri interi a 32 bit. Questo array ha più di bit sufficienti per rappresentare ogni possibile stato interno del RNG (2 624 * 32> 2 -1).
La tupla restituita da get_state
può essere utilizzata in modo molto simile a un seme per creare sequenze riproducibili di numeri casuali. Per esempio:
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]
fonte
2015-08-24 00:06:06
Puoi spiegare cosa intendi per * "utilizzare il seme corrente da trasferire per la successiva iterazione di un processo" *? C'è una ragione per cui non puoi semplicemente usare una combinazione di 'np.random.get_state' e' np.random.set_state', oppure passare un'istanza di 'np.random.RandomState' per tenere traccia degli interni stato del RNG? –
@ali_m Se ho corretto il seme, so quale seme utilizzare per riprodurre il risultato. Tuttavia, se non ho riparato il seme, come posso vedere quale seme viene usato? – Mast
perché la risposta alla tua domanda dice "La risposta breve è che semplicemente non puoi (almeno non nel caso generale)." Tuttavia hai accettato la risposta. È riuscito a rispondere alla tua domanda o no? Sono confuso. –