从以下代码:
import numpy as np
print 2**np.array([32, 33])
我得到负数[-2147483648 -2147483648]
。我使用的是python 2.6。这是某种bug吗?相反,print 2**32
会给出正确答案4294967296
。
答案 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.])