我对 python/numpy 在类型转换无符号整数时的工作方式感到有些困惑。
例子:
import numpy as np
x = np.array([255], dtype=np.uint8)
y = x + 1
Run Code Online (Sandbox Code Playgroud)
这给出了结果:
In[0]: y
Out[0]: array([0], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)
我知道 uint8 无法存储大于 255 的整数,因此它会循环回零。我有点期待这个。
现在我尝试:
z = x + 256
Run Code Online (Sandbox Code Playgroud)
这使:
In[1]: z
Out[1]: array([511], dtype=uint16)
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,类型已更改为具有更多字节的类型以容纳较大的数字,但前提是要添加的整数本身不适合较小的类型。(有趣的是 x + 255 没有给出 uint16 结果)
这让我觉得有些奇怪的行为。这背后有什么逻辑吗?我本以为更一致的做法是将第一个示例中的类型更改为 uint16。