NumPy 2.0.0发布

💡 原文中文,约2300字,阅读约需6分钟。
📝

内容提要

NumPy 2.0.0发布,新增功能和性能改进,包括权重参数、字符串操作的高性能ufuncs、排序功能加速。Python API改进,公共API和私有API分开,删除非推荐函数和别名。C API改进,新增创建自定义dtypes的公共C API。类型推广行为改进,修正用户对类型推广的问题。NumPy 2.0.0是自2006年以来的第一个主要版本,是开源库良好管理模式的范例。建议依赖NumPy ABI的下游包构建新版本,并验证适用性。

🔎

延伸解读

类型推广变更的影响

NumPy 2.0 采用了 NEP 50 类型推广规则,修正了以往类型推广依赖输入数组数据值而非仅 dtypes 的问题。这一变更可能导致混合类型操作的输出 dtype 发生变化,并可能降低精度。用户需参考移植指南,检查代码中是否存在依赖旧行为的操作,以确保兼容性。

下游包的兼容性建议

由于 NumPy 内部结构变化,依赖 NumPy ABI 的下游包应针对 NumPy 2.0 构建新版本,并验证其同时适用于 2.0 和 1.26。建议在 2.0.0rc1(ABI 稳定)和最终 2.0.0 版本之间完成构建和测试,以避免给用户带来问题。

性能与平台改进

NumPy 2.0 通过英特尔 x86-simd-sort 和 Google Highway 库加速了排序操作,可能带来硬件相关的显著提速。macOS 上线性代数性能提升,轮子缩小约 3 倍。numpy.save 使用 pickle 协议第 4 版,支持大于 4GB 的对象并提升大型数组保存速度约 5%。

API 清理与长期维护

NumPy 2.0 将公共 API 和私有 API 明确分开,删除了许多非推荐函数和别名,主命名空间对象减少约 10%,numpy.lib 减少约 80%。这简化了学习和使用,但用户需检查代码中是否使用了已删除的 API。作为自 2006 年以来首个主要版本,它展示了开源库良好管理模式,强调稳定性和向后兼容性。

❓

Q&A

NumPy 2.0.0有哪些新功能?

NumPy 2.0.0新增了权重参数支持的np.quantile、np.unique_counts和np.unique_values、可变长度字符串dtype(StringDType)、以及加速的排序功能等。

NumPy 2.0.0的性能改进有哪些?

性能改进包括使用英特尔x86-simd-sort和Google Highway库加速排序功能,以及在macOS上提高线性代数操作性能。

NumPy 2.0.0对Python API做了哪些改进?

Python API改进包括公共API和私有API的分开,删除非推荐函数和别名,使学习和使用变得更容易。

NumPy 2.0.0的C API有哪些变化?

C API新增了创建自定义dtypes的公共API,删除了过时函数,并隐藏了私有内部结构以便于未来扩展。

NumPy 2.0.0的类型推广行为有什么改进?

类型推广行为通过采用NEP 50得到了改进,修正了用户对类型推广的误解,输出dtypes可能会发生变化。

为什么建议下游包构建新版本以适应NumPy 2.0.0?

建议下游包构建新版本是为了验证其适用性,避免因NumPy ABI变化而导致的问题。

🏷️

标签

➡️

继续阅读