Numpy: default_rng.integers (2 ** 32) siempre devuelve 0

Creado en 24 abr. 2020  ·  7Comentarios  ·  Fuente: numpy/numpy

Ejemplo de código de reproducción:

No entiendo por qué default_rng.integers(2**32) siempre devuelve 0, mientras que 2**32-1 , 2**32+1 , 2**40 , etc. devuelven números aleatorios como se esperaba. El resultado es numpy.int64 , por lo que esperaba poder generar números de hasta 2**64-1 .

$ python3.7 -c 'from numpy.random import default_rng; rng=default_rng(); print([rng.integers(2**32) for _ in range(5)])'
[0, 0, 0, 0, 0]

Está bien con 2**40 :

$ python3.7 -c 'from numpy.random import default_rng; rng=default_rng(); print([rng.integers(2**40) for _ in range(5)])'
[386296210341, 896689857600, 958588149890, 364800985883, 643738305251]

Información de la versión de Numpy / Python:

Estoy ejecutando Fedora 31 con python3-3.7.6-2.fc31.x86_64 y python3-numpy-1.17.4-2.fc31.x86_64:

vstinner@apu$ python3.7
Python 3.7.6 (default, Jan 30 2020, 09:44:41) 
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys, numpy; print(numpy.__version__, sys.version)
1.17.4 3.7.6 (default, Jan 30 2020, 09:44:41) 
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]
00 - Bug 06 - Regression numpy.random high

Comentario más útil

El problema también está en el maestro:

In [1]: import numpy as np

In [2]: np.__version__
Out[2]: '1.19.0.dev0+6d6df47'

In [3]: rng = np.random.default_rng()

In [4]: rng.integers(2**32, size=8)
Out[4]: array([0, 0, 0, 0, 0, 0, 0, 0])

Esto probablemente se introdujo en https://github.com/numpy/numpy/pull/14777. Le daré un vistazo.

Todos 7 comentarios

Probablemente usa un generador de 32 bits en segundo plano para velocidades más altas, ¡pero luego lanza 2**32 + 1 a 32 bits por accidente! Definitivamente es un error bastante serio.

El problema también está en el maestro:

In [1]: import numpy as np

In [2]: np.__version__
Out[2]: '1.19.0.dev0+6d6df47'

In [3]: rng = np.random.default_rng()

In [4]: rng.integers(2**32, size=8)
Out[4]: array([0, 0, 0, 0, 0, 0, 0, 0])

Esto probablemente se introdujo en https://github.com/numpy/numpy/pull/14777. Le daré un vistazo.

Gracias @WarrenWeckesser , el problema también está en 1.17, por lo que puede ser anterior a su confirmación. Pero creo que a estas alturas va tan profundo en el código y parece que conoces esa parte. Genial, solo estaba considerando hacer ping a Kevin :).

Si lo conseguimos, deberíamos intentar incluir la corrección en 1.18.4, creo.

@seberg , gh-14777 fue actualizado a 1.17.

Resulta que la causa es https://github.com/numpy/numpy/pull/14501 , que fue actualizado a 1.17.3. Estoy trabajando en una solución.

La solución propuesta está en https://github.com/numpy/numpy/pull/16076

¿Fue útil esta página
0 / 5 - 0 calificaciones