gpt4 book ai didi

python - 获取 numpy 以警告整数溢出

转载 作者:太空狗 更新时间:2023-10-29 19:29:14 25 4
gpt4 key购买 nike

我主要使用 python,因为不必担心整数溢出而被宠坏了。现在用的是numpy,又得操心了。我希望 numpy 在溢出的情况下出错,但它似乎不适用于 int64。

import numpy
numpy.seterr(all='raise')
print("{:,}".format(numpy.prod([10]*50)))
# -5,376,172,055,173,529,600
print("{:,}".format(numpy.int64(3200000000) * numpy.int64(3200000000)))
# -8,206,744,073,709,551,616
print("{:,}".format(numpy.int32(320000) * numpy.int32(320000)))
# FloatingPointError: overflow encountered in int_scalars -- Finally getting an error!

我总是可以添加 dtype=object 来解决这些问题,但我认为 int64 在大多数情况下已经足够好了,可怕的是它可能会以这种难以检测的方式失败。

为什么 seterr 只对 int32 有效?我可以让它适用于 int64 吗?

numpy.seterr的唯一部分我可以找到的文档可能暗示了为什么会出现这种情况,以下是以下短文:

Note that operations on integer scalar types (such as int16) are handled like floating point, and are affected by these settings.

但是 data type 中什么也没有文档会建议 int32 和 int64 在某种程度上在概念上有所不同。不确定 int64 是否不被视为“整数标量类型”。

最佳答案

确实,行为似乎取决于 int 类型的大小。这是一个包含您的案例并添加了更多案例的列表(已设置 numpy.seterr(all='raise'))。

In [25]: numpy.int(3200000000) * numpy.int(3200000000)
Out[25]: 10240000000000000000

In [26]: numpy.int8(3200000000) * numpy.int8(3200000000)
Out[26]: 0

In [27]: numpy.int16(3200000000) * numpy.int16(3200000000)
---------------------------------------------------------------------------
FloatingPointError Traceback (most recent call last)
<ipython-input-27-a6185c9da0fd> in <module>()
----> 1 numpy.int16(3200000000) * numpy.int16(3200000000)

FloatingPointError: overflow encountered in short_scalars

In [28]: numpy.int32(3200000000) * numpy.int32(3200000000)
---------------------------------------------------------------------------
FloatingPointError Traceback (most recent call last)
<ipython-input-28-a3909399b44a> in <module>()
----> 1 numpy.int32(3200000000) * numpy.int32(3200000000)

FloatingPointError: overflow encountered in int_scalars

In [29]: numpy.int64(3200000000) * numpy.int64(3200000000)
Out[29]: -8206744073709551616

关于python - 获取 numpy 以警告整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32014215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com