正如Nils Werner已经提到的那样,numpy的本机ctypes无法保存那么大的数字,但是python本身可以保存,因为int对象使用任意长度的实现。因此,您可以 做的是告诉numpy不要将数字转换为ctypes,而要使用python对象。这会比较慢,但是会起作用。
In [14]: x = np.array([18,30,31,31,15], dtype=object)
In [15]: 150**x
Out[15]:
array([1477891880035400390625000000000000000000L,
191751059232884086668491363525390625000000000000000000000000000000L,
28762658884932613000273704528808593750000000000000000000000000000000L,
28762658884932613000273704528808593750000000000000000000000000000000L,
437893890380859375000000000000000L], dtype=object)
在这种情况下,numpy数组本身不会存储数字,而是引用相应的int对象。当您执行算术运算时,它们不会在numpy数组上执行,而是在引用后面的对象上执行。 我认为您仍然可以使用大多数numpy函数使用此替代方法,但是它们肯定比平时慢很多。
但是,当您处理这么大的数字时,这就是您得到的:D 也许在某个地方,有一个库可以更好地处理此问题。
仅出于完整性考虑,如果精度不是问题,则还可以使用浮点数:
In [19]: x = np.array([18,30,31,31,15], dtype=np.float64)
In [20]: 150**x
Out[20]:
array([ 1.47789188e+39, 1.91751059e+65, 2.87626589e+67,
2.87626589e+67, 4.37893890e+32])