繁体   English   中英

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

[英]Why np.array([1e5])**2 is different from np.array([100000])**2 in Python?

请有人请解释一下为什么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

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。)

你的系统是默认为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 vs 64)取决于你的numpy构建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM