Python 3.6.1 - Numpy.power返回正int数的立方体幂的负值

时间:2017-10-31 12:39:57

标签: python arrays numpy

如果我向Python询问1963年的立方体能力,我会得到:

In[1]: 1963**3
Out[1]: 7564163347

但是如果我定义一个数组并要求numpy.power返回立方体的力量,我得到:

In[1]: a=nu.array([1, 3, 5, 1963])
In[2]: nu.power(a)
Out[2]: array([1, 27, 125, -1025771245], dtype=int32)

为什么它正确地返回一些数字而不是其他数字?我是否需要在原始数组中将所有数字标记为float?为什么它会对阵列产生问题,但是当我直接询问立方体功率时(例如1961 ** 3)呢?

我注意到这有效:

In[1]: a=nu.array([1, 3, 5, 1963.0])
In[2]: nu.power(a)
Out[2]: array([1.00000000e+00, 2.70000000e+01, 1.25000000e+02, 7.56416335e+09])

谢谢!

1 个答案:

答案 0 :(得分:1)

这是因为1963年的立方体大于可以存储在32位整数中的最大数(2,147,483,647)。

您需要告诉numpy使用64位整数进行此操作,您可以通过指定dtype参数来执行此操作:

a = nu.array([1, 3, 5, 1963], dtype="int64")

或使用long python类型:

a = nu.array([1, 3, 5, 1963L])

两者都给出正确的输出:

>>> nu.power(a, 3) array([1, 27, 125, 7564163347], dtype=int64)

编辑: 这样做的原因并非如此:

1963**3

是因为Python会自动将输出转换为long类型。

EDIT2: 道歉,Python 3没有单独的long类型,只有第一个示例适用于Python 3,两者都是有效的Python 2。