如果我向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])
谢谢!
答案 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。