2024-05-08 00:09:24 发布
网友
来自以下代码:
import numpy as np print 2**np.array([32, 33])
我得到负数[-2147483648 -2147483648]。我使用的是python2.6。是不是某种臭虫?相反,print 2**32给出正确答案4294967296。在
[-2147483648 -2147483648]
print 2**32
4294967296
这些值太大,无法存储在32-bit int中,numpy默认使用该值。如果将数据类型设置为float(或64-bit int),则会得到正确的结果:
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.])
这些值太大,无法存储在
32-bit int
中,numpy
默认使用该值。如果将数据类型设置为float
(或64-bit int
),则会得到正确的结果:这是因为当使用numpy时,给定的数字将具有一定的大小,例如32位或64位的int。这些将在给定的计算中溢出,并给出负数。在
试着让它们漂浮起来,这样会有帮助:
相关问题 更多 >
编程相关推荐