Python 求幂运算符 ** 的错误?

2024-05-08 00:09:24 发布

您现在位置:Python中文网/ 问答频道 /正文

来自以下代码:

import numpy as np

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

我得到负数[-2147483648 -2147483648]。我使用的是python2.6。是不是某种臭虫?相反,print 2**32给出正确答案4294967296。在


Tags: 答案代码importnumpyasnparrayprint
2条回答

这些值太大,无法存储在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]

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

试着让它们漂浮起来,这样会有帮助:

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

相关问题 更多 >