Estoy a la espera de otro desarrollador para terminar una pieza de código que va a devolver un np de la matriz de la forma (100,2000) con los valores de cualquiera de las -1,0, o 1.

Mientras tanto, quiero al azar para crear una matriz de las mismas características de lo que puedo conseguir un head start en mi desarrollo y pruebas. La cosa es que quiero que esta creado al azar de la matriz a ser el mismo cada vez, por lo que no estoy de pruebas en contra de una matriz que va a cambiar su valor cada vez que me vuelva a ejecutar mi proceso.

Puedo crear mi matriz como esta, pero hay una manera de crear, de modo que es el mismo cada vez. Puedo pickle el objeto y unpickle, pero pregunto si hay otra forma.

r = np.random.randint(3, size=(100, 2000)) - 1
InformationsquelleAutor Idr | 2011-04-29

5 Comentarios

  1. 78

    Simplemente la semilla del generador de números aleatorios con un valor fijo, por ejemplo,

    numpy.random.seed(42)

    De esta manera, usted siempre obtendrá la misma secuencia de números aleatorios.

    • mucho mejor que el decapado y unpickling. gracias Sven
    • Alguien se coló en el numpy.random.seed() función cuando yo no estaba prestando atención. 🙂 Me ha dejado fuera del módulo original. Recomiendo que la gente utilice sus propias instancias de RandomState y pasando los objetos a su alrededor.
    • Robert es un importante contribuyente a la numpy. Creo que deberíamos dar su opinión algunos de peso.
    • Estoy agradecido por el trabajo de Robert, pero su trabajo no es un sustituto para dar una justificación de la recomendación. Además, si el uso de numpy.random.seed() es desanimado, esto debe ser mencionado en documentación. Al parecer, a otros colaboradores NumPy no compartir la opinión de Robert. Sin ánimo de ofender intención en absoluto, sólo tengo curiosidad.
    • Este es el mismo como el uso de random.seed frente a mediante un random.Random objeto en la biblioteca estándar de Python. Si utiliza random.seed o numpy.random.seed, se siembra todo instancias aleatorias, tanto en su código y en el código que está llamando o cualquier código que se ejecuta en la misma sesión de la suya. Si esas cosas dependen de esas cosas que son realmente aleatorios, entonces comienza a ejecutar en problemas. Si implementa el código que establece la semilla aleatoria, puede introducir una vulnerabilidad de seguridad.
    • Toda persona que utiliza un generador de números pseudo aleatorios para fines de seguridad probablemente no saben lo que están haciendo.
    • Se puede o puede que no. En el mundo de la Evidencia Basada en las Elecciones y el Riesgo de Limitación de Auditorías, ciertamente dependen de generadores pseudoaleatorios para fines de seguridad. Necesitamos comprobable impredecible de muestreo de las boletas, por lo que podemos seleccionar y verificación de las papeletas en contra de los registros electrónicos, impredecible o de números para las simulaciones, etc. Si algunos de depuración de código hace que las cosas sean predecibles, que sería una gran cosa. A pesar de que, desde el Mersenne Twister no es una buena elección, desarrollamos nuestro propio (dados para las semillas y criptográficamente segura pseudoaleatoria secuencias), y este tipo de cosas no nos pican.
    • La mayoría de los generadores de números aleatorios utilizado en criptografía son pseudo-aleatorio, y no hay nada de malo con eso.
    • un seguro aún eficiente de los recursos, el enfoque es el uso de cierto aleatorios para la semilla y pseudoaleatoria para el próximo secuencias
    • Esta respuesta plantea hoy en día TypeError: 'int' object is not callable

  2. 175

    Crear su propia instancia de numpy.random.RandomState() con su linaje escogido. No utilice numpy.random.seed() excepto para evitar inflexible bibliotecas que no permiten pasar alrededor de su propio RandomState instancia.

    [~]
    |1> from numpy.random import RandomState
    
    [~]
    |2> prng = RandomState(1234567890)
    
    [~]
    |3> prng.randint(-1, 2, size=10)
    array([ 1,  1, -1,  0,  0, -1,  1,  0, -1, -1])
    
    [~]
    |4> prng2 = RandomState(1234567890)
    
    [~]
    |5> prng2.randint(-1, 2, size=10)
    array([ 1,  1, -1,  0,  0, -1,  1,  0, -1, -1])
    • ¿Tiene alguna justificación para su recomendación? Lo que está mal con numpy.random.seed()? Sé que no es thread-safe, pero es muy práctico si usted no necesita la seguridad de subprocesos.
    • Es sobre todo para formar buenos hábitos. Puede que no necesite independiente corrientes de ahora, pero Sven-6-meses-de-ahora podría. Si usted escribe sus bibliotecas para el uso de los métodos directamente desde numpy.random, usted no puede hacer independiente de los arroyos más tarde. También es más fácil escribir las bibliotecas con la intención de tener controlado PRNG arroyos. Siempre hay varias maneras de entrar en su biblioteca, y cada uno de ellos debe tener una forma de control de la semilla. Pasar alrededor de PRNG objetos es la forma más limpia de hacerlo de confiar en numpy.random.seed(). Por desgracia, este cuadro de comentario es demasiado corta para contener ejemplos más.:-)
    • Gracias por la respuesta. Usted está criando buenos puntos, y pensando un poco, estoy de acuerdo en que este es más limpio. Yo todavía creo que el OP propósitos de prueba numpy.random.seed() debe estar bien, pero voy a editar numpy.random.seed() de mi propio código de biblioteca 🙂
    • Otra manera de describir Robert justificación: el uso de numpy.azar.la semilla se utiliza una variable global para mantener el PRNG estado, y el mismo estándar de las razones por las que las variables globales son malos se aplican aquí.
    • Si por el contrario, las secuencias deben ser independiente, quiero semilla del generador de números aleatorios con el tiempo.tiempo(). Sin embargo, la sintaxis de RandomState(1234567890) no funciona (?)
    • Si desea que el PRNGs a ser independiente, no de la semilla con cualquier cosa. Sólo uso numpy.random.RandomState() sin argumentos. Esta será la semilla del estado, con valores únicos extraídos de su sistema operativo adaptado para este tipo de cosas (/dev/urandom en las máquinas UNIX y el equivalente en Windows hay). Si numpy.random.RandomState(1234567890) no está trabajando para usted, por favor, mostrar exactamente lo que ha escrito y exactamente el mensaje de error que tienes.
    • ¿qué piensa usted de la siembra utilizando int(tiempo.time())?
    • No es una buena idea. Uso numpy.random.RandomState() sin argumentos para obtener los mejores resultados.
    • Esta respuesta me dio mucho más de lo que yo estaba buscando cuando me encontraba en la búsqueda de la solución para el mismo problema el cartel explicó. Buena manera de deshacerse de la implícita global de la variable es el generador de números aleatorios utilizado cuando la obtención de números aleatorios directamente de numpy.azar.
    • Otra razón para utilizar su propia instancia de RandomState desde el principio es que va a ayudar a crear reproducible de pruebas de unidad. Como me enteré de la manera difícil, si import numpy en unittest y hacer numpy.random.seed, que no cambio de la semilla en el módulo que vamos a probar!

  3. 3

    Si está utilizando otras funciones de confiar en un estado aleatorio, no se puede establecer y global de la semilla, pero en su lugar, debe crear una función para generar su lista aleatoria de número y el conjunto de la semilla como un parámetro de la función. Esto no va a molestar a cualquier otra al azar de los generadores en el código:

    # Random states
    def get_states(random_state, low, high, size):
        rs = np.random.RandomState(random_state)
        states = rs.randint(low=low, high=high, size=size)
        return states
    
    # Call function
    states = get_states(random_state=42, low=2, high=28347, size=25)
  4. 1

    Es importante entender lo que es la semilla de un generador de números aleatorios y cuando/cómo se establece en el código (por ejemplo, comprobar aquí para una buena explicación de la matemática significado de la semilla).

    Para que usted necesita para establecer la semilla haciendo:

    random_state = np.random.RandomState(seed=your_favorite_seed_value)

    Es entonces importante para generar los números aleatorios a partir de random_state y no de np.azar. I. e. usted debe hacer:

    random_state.randint(...)

    lugar de

    np.random.randint(...) 

    que creará una nueva instancia de RandomState() y, básicamente, el uso de su computadora reloj interno para establecer la semilla.

  5. 1

    Sólo quiero aclarar algo con respecto a @Robert Kern responder sólo en caso de que no esté clara. Incluso si usted utiliza el RandomState tendría para inicializar cada vez que se llame a una colección al azar como método de Robert ejemplo de lo contrario, usted obtendrá los siguientes resultados.

    Python 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 19:07:31) 
    [GCC 7.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import numpy as np
    >>> prng = np.random.RandomState(2019)
    >>> prng.randint(-1, 2, size=10)
    array([-1,  1,  0, -1,  1,  1, -1,  0, -1,  1])
    >>> prng.randint(-1, 2, size=10)
    array([-1, -1, -1,  0, -1, -1,  1,  0, -1, -1])
    >>> prng.randint(-1, 2, size=10)
    array([ 0, -1, -1,  0,  1,  1, -1,  1, -1,  1])
    >>> prng.randint(-1, 2, size=10)
    array([ 1,  1,  0,  0,  0, -1,  1,  1,  0, -1])

Dejar respuesta

Please enter your comment!
Please enter your name here