numpy实际上正在为此寻找您。与标准Python不同,其整数运算不适用于任意精度的对象。我猜您正在运行32位python,因为相同的操作不会对我溢出:
>>> sys.maxsize9223372036854775807>>> size = 3000>>> c = numpysum(size)>>>
但他们最终会。甚至更容易了解您是否手动控制类型的大小:
>>> numpy.arange(10, dtype=numpy.int8)**10__main__:1: RuntimeWarning: invalid value encountered in powerarray([ 0, 1, 0, -87, 0, -7, 0, -15, 0, 0], dtype=int8)>>> numpy.arange(10, dtype=numpy.int16)**10array([ 0, 1, 1024, -6487, 0, 761, -23552, 15089, 0, 0], dtype=int16)>>> numpy.arange(10, dtype=numpy.int32)**10array([ 0,1, 1024, 59049, 1048576,9765625, 60466176, 282475249, 1073741824, -2147483648], dtype=int32)>>> numpy.arange(10, dtype=numpy.int64)**10array([ 0, 1, 1024, 59049, 1048576, 9765625, 60466176, 282475249, 1073741824, 3486784401])
随着位数的增加,情况会有所改善。如果您确实希望对Python任意大小的整数执行numpy数组操作,则可以将dtype设置为object:
>>> numpy.arange(10, dtype=object)**20array([0, 1, 1048576, 3486784401, 1099511627776, 95367431640625, 3656158440062976, 79792266297612001, 1152921504606846976, 12157665459056928801], dtype=object)



