为什么np.array([1e5])**2与Python中的np.array([100000])**2不同?

Ami*_*min 5 python arrays numpy exponent

愿有人请解释我为什么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??
Run Code Online (Sandbox Code Playgroud)

我发现此行为从1e5开始,因为下面的代码给出了正确的结果:

>>> np.array([1e4])**2
array([  1.00000000e+08])   # correct

>>> np.array([10000])**2
array([100000000])          # and still correct
Run Code Online (Sandbox Code Playgroud)

And*_*ffe 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')
Run Code Online (Sandbox Code Playgroud)

但是在numpy中,整数具有固定的宽度(与python本身相反,它们是任意长度数),因此当它们大于允许的最大值时它们会"翻转".

(注意,在你的情况下,你使用的是32位版本,所以实际上后者会给你dtype('int32'),它的最大值为2**32-1 = 2,147,483,647,大约为2e9,小于1e10.)