Numpy: default_rng.integers (2 ** 32) selalu mengembalikan 0

Dibuat pada 24 Apr 2020  ·  7Komentar  ·  Sumber: numpy/numpy

Contoh kode reproduksi:

Saya tidak mengerti mengapa default_rng.integers(2**32) selalu mengembalikan 0, sedangkan 2**32-1 , 2**32+1 , 2**40 , dll. Mengembalikan angka acak seperti yang diharapkan. Hasilnya adalah numpy.int64 , jadi saya berharap bisa menghasilkan angka hingga 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]

Tidak masalah dengan 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]

Informasi versi Numpy / Python:

Saya menjalankan Fedora 31 dengan python3-3.7.6-2.fc31.x86_64 dan 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

Komentar yang paling membantu

Masalahnya ada di master juga:

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

Ini mungkin diperkenalkan di https://github.com/numpy/numpy/pull/14777. Aku akan melihatnya.

Semua 7 komentar

Mungkin itu menggunakan generator 32bit di latar belakang untuk kecepatan yang lebih tinggi, tetapi kemudian secara tidak sengaja melemparkan 2**32 + 1 ke 32bit! Ini pasti bug yang cukup serius.

Masalahnya ada di master juga:

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

Ini mungkin diperkenalkan di https://github.com/numpy/numpy/pull/14777. Aku akan melihatnya.

Terima kasih @WarrenWeckesser , masalahnya juga di 1,17, jadi mungkin lebih lama dari commit Anda. Tapi saya pikir sekarang ini sudah masuk jauh ke dalam kode dan Anda sepertinya tahu bagian itu. Hebat sekali, baru saja mempertimbangkan untuk melakukan ping ke Kevin :).

Jika kami berhasil, kami harus mencoba memasukkan perbaikan di 1.18.4 saya kira.

@seberg , gh-14777 di-backport ke 1,17.

Ternyata penyebabnya adalah https://github.com/numpy/numpy/pull/14501 , yang di-backport ke 1.17.3. Saya sedang memperbaikinya.

Perbaikan yang diusulkan ada di https://github.com/numpy/numpy/pull/16076

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

Levstyle picture Levstyle  ·  3Komentar

amuresan picture amuresan  ·  4Komentar

kevinzhai80 picture kevinzhai80  ·  4Komentar

astrofrog picture astrofrog  ·  4Komentar

Foadsf picture Foadsf  ·  3Komentar