gpt4 book ai didi

python - 当我设置的值对于给定的 dtype 来说太大时会发生什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:57 25 4
gpt4 key购买 nike

所以我总是这样创建 numpy 数组:

>>> u = np.zeros( 10, int )
>>> v = np.zeros( 10, float )

直到现在,我一直对最大允许值一无所知。我一直假设它会简单地工作。如果没有,我会得到 OverflowError,然后我会找到一些解决方法,比如取对数。

但最近我开始使用其他数据类型:

>>> v8 = np.zeros( 10, np.uint8 )
>>> v8[0] = 2 ** 8 - 1
>>> v8[1] = 2 ** 8
>>> v8
>>> array([255, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=uint8)

好吧,当我分配一个大于 255 的值时,我没有收到任何警告。这有点可怕。

所以我的问题是:

  • 当我使用类型为intfloat 的数组时,是否有可能我在不知情的情况下设置了一个太大的值(导致完全错误的计算)?
  • 如果我想使用 uint8,是否必须手动检查所有分配的值是否在 [0, 255] 中?

最佳答案

numpy 在机器层面的工作非常深入。测试很耗时,因此,测试留给了开发人员。 Python 更高级,许多测试都是自动完成的,或者在整数的情况下,整数可以具有任意大的值。在任何地方,您都必须在速度和安全性之间做出决定。 numpy 在速度方面更进一步。

在需要测试值范围的情况下,您必须自己检查。

clip 方法可以帮助您:

>>> u = np.array([124,-130, 213])
>>> u.astype('b')
array([124, 126, -43], dtype=int8)
>>> u.clip(-128,127).astype('b')
array([ 124, -128, 127], dtype=int8)

关于python - 当我设置的值对于给定的 dtype 来说太大时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322881/

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