NumPy 2.0.0发布
内容提要
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变化而导致的问题。