我试图通过以下代码在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

10-07 19:07