此问题在此处已有答案:
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**2
和ysqr[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
型
1条答案
按热度按时间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