Python的电源操作员**的错误?

时间:2017-01-21 13:41:34

标签: python numpy

从以下代码:

import numpy as np

print 2**np.array([32, 33])

我得到负数[-2147483648 -2147483648]。我使用的是python 2.6。这是某种bug吗?相反,print 2**32会给出正确答案4294967296

2 个答案:

答案 0 :(得分:8)

这些值太大,无法存储在32-bit int numpy默认使用的float中。如果将数据类型设置为64-bit int(或import numpy as np print 2 ** np.array([32, 33], dtype=np.float) # [ 4.2946730e+09 8.58993459e+09 ] print 2 ** np.array([32, 33], dtype=np.int64) # 64-bit int as suggested by PM 2Ring # [ 4294967296 8589934592] ),则会得到正确的结果:

jacoco-agent.properties

答案 1 :(得分:3)

这是因为当使用numpy时,给定的数字将具有一定的大小,例如32或64位int。这些将在给定的计算中溢出,并给出负数。

尝试让它们浮动,它应该有所帮助:

print 2**np.array([32., 33.])