Python的一个bug';谁是电力运营商**?

Python的一个bug';谁是电力运营商**?,python,numpy,Python,Numpy,从以下代码: import numpy as np print 2**np.array([32, 33]) 我得到了负数[-2147483648-2147483648]。我正在使用python 2.6。它是某种虫子吗?相反,print 2**32给出了正确的答案4294967296这是因为当使用numpy时,给定的数字将具有一定的大小,例如32或64位整数。这些数字将在给定的计算中溢出,并给出负数 尝试使它们浮动,这将有助于: print 2**np.array([32., 33.]) 这

从以下代码:

import numpy as np

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

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

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

尝试使它们浮动,这将有助于:

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

这些值太大,无法存储在默认情况下使用的
32位int
中。如果将数据类型设置为
float
(或
64位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]

你在Windows上吗?是的,我在Windows上,但我不确定它是否溢出。当我写print 2**32时,我得到了4294967296。我可以问一下,为什么内置运算符中的错误是您的第一个猜测吗?执行plain
2**32
会得到正确的结果,因为它使用的是Python整数,可以任意增长(尽管在Python中,大于CPU本机整数大小的整数将是
long
而不是
int
)。但Numpy设计为使用固定大小的数字,而不是Python整数。@MYGz即使使用64位窗口也可能会有问题:或者如果您想要精确的整数结果,请使用
dtype=np.int64
在Python2.7.6上运行良好,而不指定dtype。也许新版本的Numpy可以处理它?可能与32位操作系统有关吗?@M当然是YGz。;(查看
np.array([32,33]).dtype打印的内容。当然,也可以在64位系统上安装32位Python。@MYGz我不确定。我已经在Windows1064位上用Python2.7.9 64位和Numpy1.9.0对它进行了测试,可以重现OP descriptions.interest的行为。我想有一个参数可以使
int32
成为保持向后兼容性的默认类型。但是我没有64位的机器,我也不使用Windows,所以我会闭嘴