¡Ya ha hecho muchas observaciones correctas!
A menos que desee sembrar ambos generadores aleatorios, probablemente sea más sencillo a largo plazo elegir un generador u otro. Pero si necesita usar ambos, entonces sí, también necesitará sembrarlos a ambos, porque generan números aleatorios de forma independiente entre sí.
Porque numpy.random.seed()
, la principal dificultad es que no es seguro para subprocesos, es decir, no es seguro de usar si tiene muchos subprocesos de ejecución diferentes , porque no se garantiza que funcione si dos subprocesos diferentes están ejecutando la función al mismo tiempo. Si no está usando subprocesos, y si puede esperar razonablemente que no necesitará reescribir su programa de esta manera en el futuro, numpy.random.seed()
debería estar bien. Si hay alguna razón para sospechar que puede necesitar subprocesos en el futuro, es mucho más seguro a largo plazo hacer lo sugerido y crear una instancia local de la numpy.random.Random
clase . Por lo que puedo decir, random.random.seed()
es seguro para subprocesos (o al menos, no he encontrado ninguna evidencia de lo contrario).
La numpy.random
biblioteca contiene algunas distribuciones de probabilidad adicionales comúnmente utilizadas en la investigación científica, así como un par de funciones de conveniencia para generar matrices de datos aleatorios. La random.random
biblioteca es un poco más liviana y debería estar bien si no está haciendo investigación científica u otro tipo de trabajo en estadística.
De lo contrario, ambos usan la secuencia del tornado de Mersenne para generar sus números aleatorios, y ambos son completamente deterministas; es decir, si conoce algunos bits clave de información, es posible predecir con absoluta certeza qué número vendrá después . Por esta razón, ni numpy.random ni random.random son adecuados para usos criptográficos serios . Pero debido a que la secuencia es muy larga, ambos están bien para generar números aleatorios en los casos en los que no le preocupe que las personas intenten realizar ingeniería inversa en sus datos. Esta es también la razón de la necesidad de sembrar el valor aleatorio: si comienza en el mismo lugar cada vez, ¡siempre obtendrá la misma secuencia de números aleatorios!
Como nota al margen, si usted no necesita aleatoriedad nivel de cifrado, se debe utilizar el secretos módulo, o algo así Crypto.Random si está utilizando una versión anterior de Python que Python 3.6.
random.random
solo. Sin embargo, normalmente no necesitas esto.