Hai già fatto molte osservazioni corrette!
A meno che non desideri eseguire il seeding di entrambi i generatori casuali, probabilmente è più semplice a lungo termine scegliere un generatore o l'altro. Ma se devi usarli entrambi, allora sì, dovrai anche iniziarli entrambi, perché generano numeri casuali indipendentemente l'uno dall'altro.
Infatti numpy.random.seed()
, la difficoltà principale è che non è thread-safe, ovvero non è sicuro da usare se si hanno molti thread di esecuzione diversi , perché non è garantito che funzioni se due thread diversi eseguono la funzione contemporaneamente. Se non stai usando thread e se puoi ragionevolmente aspettarti che non avrai bisogno di riscrivere il tuo programma in questo modo in futuro, numpy.random.seed()
dovrebbe andare bene. Se c'è qualche motivo per sospettare che tu possa aver bisogno di thread in futuro, è molto più sicuro a lungo termine fare come suggerito e creare un'istanza locale della numpy.random.Random
classe . Per quanto ne so, random.random.seed()
è thread-safe (o almeno, non ho trovato alcuna prova del contrario).
La numpy.random
libreria contiene alcune distribuzioni di probabilità extra comunemente utilizzate nella ricerca scientifica, oltre a un paio di funzioni utili per la generazione di array di dati casuali. La random.random
libreria è un po 'più leggera e dovrebbe andare bene se non stai facendo ricerca scientifica o altri tipi di lavoro in statistica.
Altrimenti, entrambi usano la sequenza del tornado di Mersenne per generare i loro numeri casuali, e sono entrambi completamente deterministici - cioè, se conosci alcune informazioni chiave, è possibile prevedere con assoluta certezza quale numero verrà dopo . Per questo motivo, né numpy.random né random.random è adatto per usi crittografici seri . Ma poiché la sequenza è molto molto lunga, entrambi vanno bene per generare numeri casuali nei casi in cui non sei preoccupato per le persone che cercano di decodificare i tuoi dati. Questa è anche la ragione per la necessità di inizializzare il valore casuale: se inizi nello stesso punto ogni volta, otterrai sempre la stessa sequenza di numeri casuali!
Come nota a margine, se non necessario livello di crittografia casualità, è necessario utilizzare il segreto del modulo, o qualcosa di simile Crypto.Random se si sta utilizzando una versione di Python prima di Python 3.6.
random.random
solo. Di solito non ne hai bisogno, però.