numpy 2.0 彻底移除了 np.float_、np.int_、np.bool_、np.asscalar() 和 numpy.compat;需替换为 np.float64/float、np.int64/int、bool、.item(),并用 'i8'/'f8'/'?' 等标准 dtype 字符码。

直接替换,别犹豫——np.float、np.int、np.bool 这些别名在 NumPy 2.0 中已彻底消失,不是警告,是 NameError。
为什么 np.float_ 会报 NameError
这不是导入问题,也不是拼写错误。np.float_ 在 NumPy 2.0 中被完全移除,它曾是 np.float64 的别名,但因类型系统重构(尤其为对齐 Python 3.12+ 的 PEP 698 类型提示)而被砍掉。同理,np.int_、np.bool_ 也一并消失。
常见错误现象:
NameError: name 'np.float_' is not definedAttributeError: module 'numpy' has no attribute 'int'
实操建议:
- 全局搜索替换
np.float_→np.float64(或float,若语义上就是 Python 标量) - 替换
np.int_→np.int64(或int),np.bool_→bool - 注意类型注解:用
np.float64而非np.float_,否则 mypy 或 pyright 会报错
数组 dtype 字符串里不能写 'int' 或 'bool'
字符串形式的 dtype 如 'i4'、'f8'、'?' 是安全的,但 'int'、'bool' 这类无位宽别名在 NumPy 2.0 中不再映射到平台相关类型,而是直接抛 TypeError。
典型出错场景:
-
np.array([1, 2], dtype='int')→TypeError: data type 'int' not understood -
np.zeros(3, dtype='bool')→ 同样失败
实操建议:
- 用标准字符码:
'i4'(int32)、'i8'(int64)、'f4'(float32)、'f8'(float64)、'?'(布尔) - 需要跨平台兼容时,优先选
'i8'和'f8',避免'l'或'q'等平台相关码 - 如果只是想表达“默认整数”,用
int(Python 内置)更稳妥,例如np.array([1, 2], dtype=int)仍可工作
np.asscalar() 和 numpy.compat 已不存在
np.asscalar() 在 NumPy 2.0 中被移除,它曾用于把 0 维数组转成 Python 标量。同时,numpy.compat 模块也被彻底删除——不是改名,是连目录都没了。
错误现象:
AttributeError: module 'numpy' has no attribute 'asscalar'ModuleNotFoundError: No module named 'numpy.compat'
实操建议:
- 用
.item()替代np.asscalar():例如arr.item()(要求 arr 是 0 维) - 不要尝试 import
numpy.compat,也不要用它做“兼容桥”——它不存在,也没替代品 - 若需处理 Python 2/3 兼容逻辑(如
py3k工具函数),应迁移到标准库sys.version_info或typing
最容易被忽略的是:这些变更不是“松散兼容”,而是硬分界。一旦升级到 NumPy 2.0,旧代码里任何残留的 np.float、np.bool、'int' 字符串、np.asscalar 都会立刻崩,不会给你留过渡期。检查要彻底,替换要机械——别指望 warning 提示帮你兜底。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











