Saltar al contenido

Diferencias entre numpy.random y random.random en Python

Solución:

¡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 independientemente uno del otro.

Para 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á utilizando 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, a largo plazo es mucho más seguro hacer lo que se sugiere y crear una instancia local del numpy.random.Random clase. Por lo que yo puedo decir, random.random.seed() es seguro para subprocesos (o al menos, no he encontrado ninguna evidencia de lo contrario).

los numpy.random La 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. los random.random library 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, muy larga, ambos están bien para generar números aleatorios en los casos en los que no le preocupa que las personas intenten aplicar ingeniería inversa a 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 hacer necesita aleatoriedad de nivel criptográfico, debe usar el módulo de secretos, o algo como Crypto.Random si está usando una versión de Python anterior a Python 3.6.

Desde Python para análisis de datos, el módulo numpy.random complementa el Python random con funciones para generar de manera eficiente matrices completas de valores de muestra a partir de muchos tipos de distribuciones de probabilidad.

Por el contrario, Python incorporado random módulo solo muestrea un valor a la vez, mientras que numpy.random puede generar una muestra muy grande más rápido. Usando la función mágica de IPython %timeit se puede ver qué módulo funciona más rápido:

In [1]: from random import normalvariate
In [2]: N = 1000000

In [3]: %timeit samples = [normalvariate(0, 1) for _ in xrange(N)]
1 loop, best of 3: 963 ms per loop

In [4]: %timeit np.random.normal(size=N)
10 loops, best of 3: 38.5 ms per loop

La fuente de la semilla y el perfil de distribución utilizado afectarán las salidas; si está buscando aleatoriedad criptográfica, la siembra desde os.urandom () obtendrá bytes aleatorios casi reales de la charla del dispositivo (es decir, ethernet o disco) (es decir, / dev / random en BSD)

esto evitará que usted dé una semilla y genere números aleatorios deterministas. Sin embargo, las llamadas aleatorias le permiten ajustar los números a una distribución (lo que yo llamo aleatoriedad científica; eventualmente, todo lo que desea es una distribución de curva de campana de números aleatorios, numpy es mejor para ejecutar esto.

Así que sí, quédese con un generador, pero decida qué aleatorio desea: aleatorio, pero definitivamente a partir de una curva de distribución, o tan aleatorio como pueda obtener sin un dispositivo cuántico.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *