NumPy位位移操作时如何保留uint32标量原有数据类型不被提升
numpy uint32位位移避免类型向上转换的简洁实现方案
numpy 对无符号整数标量执行位运算时默认会触发类型提升规则,和Python原生整数运算时会向上转换为int64避免溢出,这是得到非预期结果的核心原因。可以用以下几种更简洁的方式实现需求:
- 使用原位位运算操作符
<<=
原位运算不会触发类型提升,会直接在原uint32类型基础上做溢出截断:x = np.uint32(123456789) x <<= 11 # 执行后x的值为3731400704,类型保持uint32 - 位移操作数使用同类型numpy标量
两个uint32类型的值做位运算不会触发类型提升,结果自动按32位无符号整数截断:x = np.uint32(123456789) res = x << np.uint32(11) - 调用numpy内置位移函数并指定输出类型
直接通过np.left_shift的dtype参数指定输出类型,无需手动做掩码运算:res = np.left_shift(x, 11, dtype=np.uint32)
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

