使用np.nan替换数组所有元素时出现异常的原因咨询
为什么用
a[:] = np.nan替换整数numpy数组元素会得到奇怪的负数? 这问题我之前也踩过坑,核心原因其实是数据类型不兼容!
问题根源
你创建的数组a = np.array([1, 2, 3]),numpy会默认给它分配整数类型(比如int64)。而np.nan本质是一个浮点数,整数类型的numpy数组根本没办法存储nan这个值——当你强行赋值时,numpy会做强制类型转换,把np.nan转成当前整数类型能表示的最小数值,也就是你看到的-9223372036854775808(这是int64类型的最小取值)。
解决方法
这里给你几种更高效的方案:
- 先把数组转换成浮点类型,再赋值:
a = np.array([1, 2, 3]) a = a.astype(float) a[:] = np.nan # 结果:array([nan, nan, nan]) - 初始化数组时直接指定浮点类型:
a = np.array([1, 2, 3], dtype=float) a[:] = np.nan - 你当前用的列表推导式方法
a = np.array([np.nan for a_i in a])也能生效,但对于大规模数组来说,numpy原生的astype方法效率会更高。
内容的提问来源于stack exchange,提问作者cssstudent
相关产品推荐
相关产品推荐

