意外的结果是将数组乘以标量

柯林斯

从“只是在我以为自己刚开始的时候”就挂在了“麻木坑”上

>>> import numpy as np
>>> y = np.array((1650, 2300, 2560, 3710)) * 1000000
>>> y
array([ 1650000000, -1994967296, -1734967296,  -584967296])

我以前的数学老师会同意第一个结果,但是其他人呢???

FWIW,在64位Win 10上运行Python 3.6.3,并获得(如预期)

>>> 2300 * 1000000
2300000000
乔纳斯·阿德勒

这是由于整数的最大值为2 ^ 31-1 = 2147483647。

您的第一个值小于此值,但其他三个值较大。因此,您会得到“环回”。注意:

-1994967296 = -2147483648 + (2300000000 - 2147483647 - 1)

因此,基本上,您已经达到最大值(2147483647)加1到最低(-2147483648),然后从那里继续。

您可以通过强制64位精度来解决此问题

>>> import numpy as np
>>> y = np.array((1650, 2300, 2560, 3710), dtype='int64') * 1000000
>>> y
array([1650000000, 2300000000, 2560000000, 3710000000], dtype=int64)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章