【问题标题】:Python 3: RuntimeWarning with numpy.powerPython 3:带有 numpy.power 的 RuntimeWarning
【发布时间】:2017-09-18 17:33:31
【问题描述】:

当使用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 中不是问题 - 那么这里有什么问题?

【问题讨论】:

  • 这里不是在处理 Python 整数,而是在处理具有固定大小(在本例中为 64 位)的 NumPy 整数,这是 NumPy 快速矢量化数学运算的先决条件提供。如果你想使用 Python 整数,请写 2**63pow(2, 63)

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


【解决方案1】:

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

>>> 2 ** 63              # Python
9223372036854775808

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

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

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    相关资源
    最近更新 更多