我试图通过以下代码在64位Windows系统上的Python 2.7中生成随机数:
random_state=numpy_rng.random_integers(1e10)
但是我收到以下错误。
OverflowError: Python int too large to convert to C long.
具有以下追溯
rand_num_generator = numpy.random.RandomState(random_state)
mtrand.RandomState.init中的文件“ mtrand.pyx”,行618(numpy \ random \ mtrand \ mtrand.c:8275)
mtrand.RandomState.seed中的文件“ mtrand.pyx”,行654(numpy \ random \ mtrand \ mtrand.c:8670)
ValueError:种子必须在0和4294967295之间
最佳答案
Python中的最大整数为:
import sys
sys.maxint
Out[61]: 2147483647
或大约
2.1e9
。那是Windows的局限性。在this帖子中:微软决定用自己的不定式智慧来制作“长” C
始终输入32位带符号整数-即使在64位系统上也是如此。
因此,不能将
random_integers
与大于该数字的参数一起使用。您可以改用以下技巧:10 * np.random.random_integers(1e9) - np.random.choice(10)
Out[62]: 3910179327L
使用
randint(0, 1e10)
的@ 2Cubed方法也应该起作用,因为通过randint
python成功将int
转换为long
。