numpy на самом деле присматривает за тобой на этом.Unlke в стандартном Python, его целочисленные операции не работают с объектами произвольной точности.Я предполагаю, что вы работали с 32-битным питоном, потому что те же самые операции для меня не переполняются:
>>> sys.maxsize
9223372036854775807
>>> size = 3000
>>> c = numpysum(size)
>>>
, но они будут в конечном итогеЕще проще увидеть, если вы контролируете размер типа вручную:
>>> numpy.arange(10, dtype=numpy.int8)**10
__main__:1: RuntimeWarning: invalid value encountered in power
array([ 0, 1, 0, -87, 0, -7, 0, -15, 0, 0], dtype=int8)
>>> numpy.arange(10, dtype=numpy.int16)**10
array([ 0, 1, 1024, -6487, 0, 761, -23552, 15089,
0, 0], dtype=int16)
>>> numpy.arange(10, dtype=numpy.int32)**10
array([ 0, 1, 1024, 59049, 1048576,
9765625, 60466176, 282475249, 1073741824, -2147483648], dtype=int32)
>>> numpy.arange(10, dtype=numpy.int64)**10
array([ 0, 1, 1024, 59049, 1048576,
9765625, 60466176, 282475249, 1073741824, 3486784401])
, где все улучшается с увеличением количества бит.Если вам действительно нужны операции с массивами над числами Python произвольного размера, вы можете установить для dtype значение object:
>>> numpy.arange(10, dtype=object)**20
array([0, 1, 1048576, 3486784401, 1099511627776, 95367431640625,
3656158440062976, 79792266297612001, 1152921504606846976,
12157665459056928801], dtype=object)