numpy中i4与S8类型提升结果为S11的原因咨询
为什么
np.promote_types('i4', 'S8')返回dtype('S11')? numpy对数值类型和字节字符串类型的提升逻辑完全不同,不是单纯比较原类型的内存占用,而是看类型转换后的表示需求:
- 当整数类型与字节字符串类型做类型提升时,整数会被转换为对应的字符串形式
- 提升后的字节串类型需要能容纳两种类型中最长的字符串表示
i4是4字节有符号整数,它的极值是-2147483648,转成字节串后长度为11(包含负号共11个字符);而S8仅能容纳8个字符的字节串。为了确保两种类型的所有值都能被正确存储,numpy会将类型提升到能容纳最长表示的S11,而非单纯取原类型中内存占用更大的S8。
你可以手动验证这个逻辑:
import numpy as np # 查看i4极值的字符串长度 len(str(np.iinfo(np.int32).min)) # 输出11
内容的提问来源于stack exchange,提问作者P.Jo
相关产品推荐
相关产品推荐

