为何Windows平台下np.uint32与np.uintc字节数相同却不相等?
问题:为何Windows平台下np.uint32与np.uintc字节数相同却不相等?
在Windows设备执行以下Python代码:
>>> import numpy as np >>> np.dtype(np.uint32).itemsize 4 >>> np.dtype(np.uintc).itemsize 4 >>> np.uint32 == np.uintc False
在Mac设备执行相同代码:
>>> import numpy as np >>> np.dtype(np.uint32).itemsize 4 >>> np.dtype(np.uintc).itemsize 4 >>> np.uint32 == np.uintc True
原因解析
这本质是numpy对固定位宽类型和绑定C标准类型的区分逻辑导致的:
np.uintc是numpy对C语言中unsigned int类型的映射,它的位宽取决于平台的C编译器实现;而np.uint32是numpy定义的固定32位无符号整数类型,位宽不随平台变化。- 在Mac(类Unix)平台上,C语言的
unsigned int本身就是32位,numpy会直接将np.uintc映射为np.uint32,二者内部类型标识一致,因此==比较返回True。 - 在Windows平台上,虽然
unsigned int也是4字节(32位),但numpy仍会将np.uintc作为独立于np.uint32的类型存在——numpy的类型比较不仅看字节数和取值范围,还会校验类型的内部标识、语义绑定关系。因此即使二者字节数相同,类型身份不同,==比较就返回False。
你可以通过查看类型名称进一步验证:在Windows上,np.uintc.name会返回'uintc',而np.uint32.name返回'uint32',这也能说明二者是不同的类型对象。
内容的提问来源于stack exchange,提问作者Chang
相关产品推荐
相关产品推荐

