FEATURED · 精选文章

NumPy 2.4.3 补丁版本发布说明:关键 Bug 修复与升级指南

发布时间 / 2026/9/20 16:37:23
来源 / 创域科博编辑部
栏目 / 资讯中心
NumPy 2.4.3 补丁版本发布说明:关键 Bug 修复与升级指南 NumPy 2.4.3 补丁版本发布说明关键 Bug 修复与升级指南【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy本指南基于当前仓库中的 2.4.3-notes.rst 整理系统梳理 NumPy 2.4.3 这个补丁版本patch release的修复内容、贡献者信息与合并的 Pull Request并结合仓库源码对其中对用户影响最大的修复项OpenBLAS ARM 线程问题、np.isin弱哈希、np.ma.flatten_structured_array无限递归、busdaycalendar布尔 weekmask 处理、CPU baseline 校验缓冲区越界等进行源码级解读。读完本文你将了解 2.4.3 解决了哪些实际问题、哪些行为发生了变化以及如何在安装后验证这些修复。版本概览一次聚焦缺陷修复的补丁发布NumPy 2.4.3 是一个补丁版本其目标是在 2.4.2 发布之后修复后续发现的一批缺陷bugs。它不引入新特性专注于稳定性和正确性修复。根据 2.4.3-notes.rst 的说明最显眼的用户可见修复针对 OpenBLAS 在 ARM 平台上的线程问题threading fix关闭了 issue #30816。这直接影响在 ARM 架构上使用 NumPy 进行线性代数计算的用户可能表现为多线程环境下的挂起或错误结果。Python 版本支持本版本支持 Python 3.11–3.14。社区规模共有11 位贡献者参与其中 Antareep Sarkar 与 stratakis 是首次提交补丁的新贡献者名字带 标记。合并规模共有14 个 Pull Request被合并进入本版本。修复亮点深度解读从 Release Notes 到源码以下修复项按用户影响程度排序逐一结合仓库源码分析其背后的实现逻辑。1. OpenBLAS 在 ARM 平台的线程修复最显眼修复Release Notes 明确指出本版本最受用户关注的修复是 OpenBLAS 在 ARM 平台上的线程问题issue #30816对应 PR #30973MAINT: update openblas即通过更新 OpenBLAS 子模块版本携带上游线程修复。从仓库结构看NumPy 通过 pyproject.toml 中的构建依赖与 OpenBLAS 的检出/构建机制集成ARM 相关的线程行为修复依赖上游 OpenBLAS 的更新而非 NumPy 自身代码。对用户而言在 ARM如 Apple Silicon、树莓派等平台上如果曾遇到np.dot、np.linalg等 BLAS 调用在多线程下异常的问题升级到 2.4.3 后应得到缓解。2.np.isin弱哈希函数修复PR #30850PR #30850BUG: Fix weak hash function in np.isin(). (#30840)修复了np.isin在哈希路径下可能因弱哈希函数产生错误结果的问题。np.isin的实现位于 numpy/lib/_arraysetops_impl.py它通过array_function_dispatch分派支持kind参数None/sort/tablesort基于归并排序mergesort的方法内存占用约为element与test_elements大小之和的 6 倍table类似计数排序的查找表方法仅适用于布尔与整数数组assume_unique对该模式无效None默认当table所需内存不超过sort的 6 倍时自动选择table否则回退到sort。哈希路径主要用于test_elements为对象数组等场景。弱哈希函数weak hash可能导致不同对象被哈希到相同桶而未被正确处理。修复后numpy/lib/tests/test_arraysetops.py 中的test_isin系列测试覆盖多维数组、array-like、零维数组、标量、空数组等多种输入形态用于回归验证该行为确保修复未引入回归。3.np.ma.flatten_structured_array无限递归修复PR #30921PR #30921BUG: fix infinite recursion in np.ma.flatten_structured_array...修复了numpy.ma模块中flatten_structured_array对嵌套结构数组可能触发无限递归的问题。该函数实现在 numpy/ma/core.py它通过内部辅助函数flatten_sequence递归展开嵌套可迭代对象def flatten_sequence(iterable): for elm in iter(iterable): if hasattr(elm, __iter__) and not isinstance(elm, (str, bytes)): yield from flatten_sequence(elm) else: yield elm对于深层嵌套的结构化数组递归展开过程可能无限递归导致栈溢出。修复后输入为MaskedArray时输出保持为掩码数组masked array同时保留原始形状numpy/ma/tests/test_core.py 中的test_flatten_structured_array测试覆盖了该函数的常规输入与嵌套场景。4.busdaycalendar布尔数组 weekmask 处理修复PR #30923PR #30923BUG: Fix busdaycalendars handling of a bool array weekmask...修复了numpy.busdaycalendar在weekmask参数以布尔数组形式传入时的处理问题。busdaycalendar及is_busday、busday_offset、busday_count等日期函数定义在 numpy/_core/multiarray.py底层 C 实现在 numpy/_core/src/multiarray/datetime_busday.c。C 层用 7 元素npy_bool weekmask[7]表示一周七天是否为工作日1 表示工作日、0 表示非工作日例如{2, 1, 1, 1, 1, 0, 0}表示周一至周五为工作日npy_bool weekmask[7] {2, 1, 1, 1, 1, 0, 0};当用户在 Python 侧以布尔数组传入weekmask例如np.array([True]*5 [False]*2)时旧版本在类型转换上存在缺陷修复后布尔数组可被正确解析为内部npy_bool掩码。相关行为可参考 numpy/_core/_add_newdocs.py 中对busdaycalendar的文档说明weekmask支持字符串如1111100或布尔数组holidays为可选的节假日数组。5. CPU baseline 校验缓冲区越界修复PR #30922PR #30922BUG: Fix buffer overrun in CPU baseline validation (#30877)修复了 **CPU baseline 校验过程中的缓冲区越界buffer overrun**问题。CPU 特性检测与 baseline 校验逻辑位于 numpy/_core/src/common/npy_cpu_features.c其通过npy_cpu_init()在 numpy/_core/src/_simd/_simd.c 中被调用初始化并校验当前 CPU 是否满足编译时设定的 baseline 指令集要求。该修复属于内存安全类修复防止在校验 CPU 特性时读写越界可能触发崩溃或不可预测行为尤其在使用 LeakSanitizer/AddressSanitizer 等工具时更容易暴露。6. 其他 Bug 修复与维护项PR #30827BUG: Fix some leaks found via LeakSanitizer (#30756)修复 LeakSanitizer 发现的内存泄漏。PR #30924BUG: Fix reference leaks and NULL pointer dereferences (#30908)修复引用泄漏与空指针解引用问题。PR #30957BUG: fix type issues in uses of PyDataType macros修复PyDataType宏使用中的类型问题涉及 C API 层的类型安全。PR #30849TYP: matlib: missing extended precision imports补充numpy.matlib中缺失的扩展精度extended precision类型导入属于类型存根typing stubs完善。PR #30955ENH: Test .kind not .char in np.testing.assert_equal (#30879)改进np.testing.assert_equal的测试逻辑改为检查.kind而非.char避免依赖特定 dtype 字符码char code使 dtype 比较更稳健。PR #30759 / #308412.4.x 分支的开发准备与子模块同步submodules synchronized with main。PR #30925MAINT: fix two minor issues noticed when touching the C API setupC API 设置相关的两处小问题修复。PR #30958MAINT: Dont use vulture 2.15, it has false positivesCI/工具链维护vulture 2.15 存在误报故在 CI 中规避该版本。贡献者名单本版本由 11 位贡献者共同完成其中带 者为首次向 NumPy 提交补丁的新人Antareep Sarkar Charles HarrisJoren HammudogluMatthieu DarboisMatti PicusNathan GoldbaumPeter HawkinsPieter EendebakSebastian BergWarren Weckesserstratakis 升级与验证建议安装方式NumPy 2.4.3 支持 Python 3.11–3.14。可通过以下方式安装或升级pip install --upgrade numpy2.4.3若需从源码构建当前仓库为源码树需满足 INSTALL.rst 中描述的构建依赖C 编译器、兼容的 BLAS/LAPACK 等并通过 pyproject.toml 中定义的 Meson 构建系统完成编译。验证修复是否生效OpenBLAS ARM 线程问题在 ARM 平台上设置OPENBLAS_NUM_THREADS多线程执行np.linalg计算观察是否仍出现挂起或结果错误np.isin弱哈希对包含对象 dtype 的数组执行np.isin并运行 numpy/lib/tests/test_arraysetops.py 中的test_isin系列测试python -m pytest numpy/lib/tests/test_arraysetops.py -k isinflatten_structured_array构造嵌套结构化数组调用np.ma.flatten_structured_array确认不再出现 RecursionErrorbusdaycalendar以布尔数组形式传入weekmask构造np.busdaycalendar确认行为与字符串1111100一致import numpy as np cal np.busdaycalendar(weekmasknp.array([True]*5 [False]*2)) print(cal.weekmask)回归测试仓库自带的测试集可整体运行需要 pytestpython -m pytest numpy/ma/tests/test_core.py numpy/lib/tests/test_arraysetops.py小结NumPy 2.4.3 是一次典型的小步快走的补丁发布没有新特性但通过 14 个 PR 修复了包括 OpenBLAS ARM 线程问题、np.isin弱哈希、np.ma.flatten_structured_array无限递归、busdaycalendar布尔 weekmask、CPU baseline 缓冲区越界、若干内存泄漏与空指针解引用在内的一批缺陷。对于 ARM 平台的线性代数用户、结构化数组与掩码数组重度用户以及关注内存安全的开发者2.4.3 值得及时升级。完整变更清单可查阅 doc/source/release/2.4.3-notes.rst。【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻