Python 3:使用numpy.power运行时警告

时间:2017-09-18 17:33:31

标签: python python-3.x numpy integer pow

使用numpy.power(2,N)时,N是整数,我遇到以下问题:

In[1] np.power(2,63)
Out[1] -9223372036854775808
RuntimeWarning: invalid value encountered in power

,更奇怪的是,

In[2] np.power(2,63)*2
Out[2] 0

对于所有大于或等于63的指数都会发生这种情况。我认为大整数在Python中不是问题 - 那么这里有什么问题呢?

1 个答案:

答案 0 :(得分:2)

大整数对Python来说不​​是问题,因为Python只有一个整数类型且具有任意精度。但是NumPy uses normal "C" data types并且它们的精确度有限:

>>> 2 ** 63              # Python
9223372036854775808

>>> np.int64(2) ** 63    # NumPy
-9223372036854775808

在大多数系统中,64位是普通NumPy可用的最高精度整数类型。因此,如果你正在处理更大的数字,你可以使用float dtypes或简单地使用普通列表或NumPy对象数组的Python整数(不是真的推荐)。