有人可以解释一下为什么np.array([1e5])**2
不等同于np.array([100000])**2
?来自Matlab,我发现它令人困惑!
>>> np.array([1e5])**2
array([ 1.00000000e+10]) # correct
>>> np.array([100000])**2
array([1410065408]) # Why??
我发现此行为从 1e5 开始,因为下面的代码给出了正确的结果:
>>> np.array([1e4])**2
array([ 1.00000000e+08]) # correct
>>> np.array([10000])**2
array([100000000]) # and still correct
答案 0 :(得分:7)
1e5
是一个浮点数,但10000是一个整数:
In [1]: import numpy as np
In [2]: np.array([1e5]).dtype
Out[2]: dtype('float64')
In [3]: np.array([10000]).dtype
Out[3]: dtype('int64')
但是在numpy中,整数具有固定的宽度(与python本身相反,它们是任意长度的数字),所以它们"翻转"当它们大于允许的最大值时。
(注意,在你的情况下,你使用的是32位版本,所以实际上后者会给你dtype('int32')
,其最大值为2 ** 32-1 = 2,147,483,647,大约为2e9,其中小于1e10。)
答案 1 :(得分:2)
您的系统默认为np.int32,无法处理100000**2
。如果你使用64位精度,你会没事的:
In [6]: np.array([100000], dtype=np.int32)**2
Out[6]: array([1410065408], dtype=int32)
In [7]: np.array([100000], dtype=np.int64)**2
Out[7]: array([10000000000])
默认值是什么(32对64)取决于你的numpy构建。