小编Jes*_*seC的帖子

将 int 添加到 uint8 时出现奇怪的类型转换?

我对 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。

python numpy

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

numpy ×1

python ×1