在Python中,当y是一个numpy数组时,为什么y**2有时不正确?

xsuvu9jc  于 11个月前  发布在  Python
关注(0)|答案(1)|浏览(87)

此问题在此处已有答案

Using numpy to square value gives negative number(1个答案)
上个月关门了。
首先,我在Python 3.12.0的IDLE shell中计算一个正方形:

>>> x = 123456
>>> x**2
15241383936

字符串
这与我的TI-89一致。现在我使用numpy数组计算我认为是相同的平方:

>>> import numpy as np
>>> y = np.array([x])
>>> ysqr = y**2
array([-1938485248])
>>> ysqr[0]  
-1938485248


为什么x**2ysqr[0]不相等?

**一个解决方案:**对于那些使用Python进行科学计算的人来说,我们可以在上面的例子中通过将x更改为浮点数来使ysqr[0]等于x**2

>>> import numpy as np
>>> y = np.array([float(x)])
>>> ysqr = y**2
array([1.52413839e+10])
>>> ysqr[0]  
15241383936.0

qcbq4gxm

qcbq4gxm1#

x是int类型,在Python中是无限的,因此x**2也是一个int,可以达到任意高的值。
然而,y是一个具有特定数据类型的numpy数组。我们可以使用print(y.dtype)观察它的数据类型,并看到它是np.int32。使用np.iinfo(np.int32),我们可以看到以下内容:iinfo(min=-2147483648, max=2147483647, dtype=int32)
由于15241383936大于int 32的最大值,它溢出并从-2147483648开始计数。事实上,它是如此之大,它循环到2147483647,并多次这样做,直到它最终落在-1938485248

相关问题