Numpy: default_rng.integers (2 ** 32) всегда возвращает 0

Созданный на 24 апр. 2020  ·  7Комментарии  ·  Источник: numpy/numpy

Воспроизведение примера кода:

Я не понимаю, почему default_rng.integers(2**32) всегда возвращает 0, тогда как 2**32-1 , 2**32+1 , 2**40 и т.д. возвращают случайные числа, как ожидалось. Результатом является numpy.int64 , поэтому я ожидал, что смогу сгенерировать числа до 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]

Все нормально с 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]

Информация о версии Numpy / Python:

Я запускаю Fedora 31 с python3-3.7.6-2.fc31.x86_64 и 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

Самый полезный комментарий

Проблема тоже в мастере:

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])

Вероятно, это было введено в https://github.com/numpy/numpy/pull/14777. Я взгляну.

Все 7 Комментарий

Вероятно, он использует 32-битный генератор в фоновом режиме для более высоких скоростей, но затем случайно переводит 2**32 + 1 в 32-битный! Это определенно довольно серьезная ошибка.

Проблема тоже в мастере:

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])

Вероятно, это было введено в https://github.com/numpy/numpy/pull/14777. Я взгляну.

Спасибо @WarrenWeckesser , проблема также в 1.17, поэтому она может быть старше вашего коммита. Но я действительно думаю, что к настоящему времени он так глубоко проникает в код, и вы, кажется, знаете эту часть. Так здорово, как раз собирался пинговать Кевина :).

Если у нас получится, мы должны попытаться включить исправление в 1.18.4, я думаю.

@seberg , gh-14777 был перенесен на 1.17.

Оказывается, причина в https://github.com/numpy/numpy/pull/14501 , который был перенесен на 1.17.3. Я работаю над исправлением.

Предлагаемое исправление находится на https://github.com/numpy/numpy/pull/16076.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги