我试图通过以下代码行在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中输入“mtrand.pyx”,第618行。 init (numpy \ random \ mtrand \ mtrand.c:8275) 在mtrand.RandomState.seed文件“mtrand.pyx”,第654行(numpy \ random \ mtrand \ mtrand.c:8670) ValueError:Seed必须介于0和4294967295之间
答案 0 :(得分:2)
Python中的最大整数是:
import sys
sys.maxint
Out[61]: 2147483647
或者appr。 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
。
答案 1 :(得分:1)
以下应该可以使用NumPy。
from numpy.random import randint
randint(1e10)
# 6073545190
您也可以使用内置random.randint
来完成相同的任务,并在此numpy.random.randint
函数here之间存在差异。
from random import randint
randint(0, 1e10)
# 7978154001