Error Numpy: se encontró un valor inválido en el poder

Tengo el siguiente código:

import numpy def numpysum(n): a = numpy.arange(n) ** 2 b = numpy.arange(n) ** 3 c = a + b return c size = 3000 c = numpysum(size) 

Cuando corro, me sale el error:

D: \ Work \ schedule \ python \ test_1 \ src \ test1_numpy.py: 6: RuntimeWarning: se encontró un valor no válido en power b = numpy.arange (n) ** 3

Tenga en cuenta que la siguiente función numpyless funciona bien:

 def pythonsum(n): a = list(range(n)) b = list(range(n)) c = [] for i in range(len(a)): a[i] = i ** 2 b[i] = i ** 3 c.append(a[i] + b[i]) return c 

Supongo que sucede porque trato de boost un número grande para alimentar a tres. ¿Qué puedo hacer, además de trabajar con números de punto flotante?

Estoy trabajando con Python 3.2.

numpy en realidad está cuidando de ti en este caso. Desbloquee en Python estándar, sus operaciones de enteros no funcionan en objetos de precisión arbitraria. Supongo que estabas ejecutando un python de 32 bits, porque las mismas operaciones no se desbordan para mí:

 >>> sys.maxsize 9223372036854775807 >>> size = 3000 >>> c = numpysum(size) >>> 

pero eventualmente lo harán. Aún más fácil de ver si controlas el tamaño del tipo manualmente:

 >>> 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]) 

Donde las cosas mejoran a medida que aumenta el número de bits. Si realmente desea operaciones de matriz numpy en enteros de tamaño arbitrario de Python, puede configurar dtype to object:

 >>> numpy.arange(10, dtype=object)**20 array([0, 1, 1048576, 3486784401, 1099511627776, 95367431640625, 3656158440062976, 79792266297612001, 1152921504606846976, 12157665459056928801], dtype=object)