资讯动态

NumPy 1.26.2 维护版深度解读:回归修复、构建系统升级与 C API 细节改进

发布时间:2026/9/20 12:23:54 来源:尧图企业网站定制
科学计算数据分析【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址https://gitcode.com/gh_mirrors/nu/numpy点击查看免费下载NumPy 1.26.2 是 1.26 系列继 1.26.1 之后发布的一个维护版本maintenance release核心使命是修复 1.26.1 发布后发现的一批 Bug 与回归问题同时同步推进构建系统、CI 基础设施与文档的收尾工作。1.26 系列是 NumPy 2.0 之前的最后一个规划次要版本系列因此本次发布对于仍在 1.x 主线上运行、尚未迁移到 2.0 的用户具有直接的升级参考价值。阅读本文后你将完整掌握 1.26.2 的 25 个合并 Pull Request 的技术内容、关键修复背后的源码级原理以及该版本对应的 Python 支持范围与构建配置变化。版本定位与支持范围根据 1.26.2-notes.rst 的官方说明NumPy 1.26.2 是一个维护版本专门用于修复 1.26.1 之后被发现的 Bug 和回归问题。同时1.26.x 系列是 NumPy 2.0 之前的最后一个规划次要版本系列意味着 1.26 分支承担着为大规模用户提供稳定基线、并为向 2.0 平滑过渡做准备的使命。该版本支持的 Python 版本为3.9 至 3.12。这一点在发布分支管理上也有体现合并的 Pull Request 中专门包含了 移除发布分支上 Python 版本上限的调整使得 1.26.x 分支可以随上游 Python 支持策略灵活演进而不是被写死的上限约束。从仓库的发布文档目录看doc/source/release 下按版本号归档了从 1.10 到 2.5 的完整发布说明1.26.2 位于 1.26.3/1.26.4 之前属于 1.26 系列的中间维护点。同系列的其他维护版本1.26.0、1.26.1、1.26.3、1.26.4也都在该目录下留有对应 notes 文件方便对比各维护点之间的修复演进。核心 Bug 修复的源码级解读本次发布合并的 25 个 Pull Request 中Bug 修复类BUG 前缀虽然数量不多但每一处都直指实际运行中可能出现的崩溃或错误结果值得逐一展开。np.random.multinomial 的 n 参数类型修复#25119该修复将np.random.multinomial中的n参数修正为long int类型。在 numpy/random/_generator.pyx 中multinomial方法接受object n并在向量化路径中通过check_array_constraint(on, n, CONS_NON_NEGATIVE)校验非负约束最终把每个试验次数ni传给底层的random_multinomialvoid random_multinomial(bitgen_t *bitgen_state, RAND_INT_TYPE n, RAND_INT_TYPE *mnix, double *pix, npy_intp d, binomial_t *binomial) { double remaining_p 1.0; npy_intp j; RAND_INT_TYPE dn n; for (j 0; j (d - 1); j) { mnix[j] random_binomial(bitgen_state, pix[j] / remaining_p, dn, binomial); dn dn - mnix[j]; if (dn 0) { break; } remaining_p - pix[j]; } if (dn 0) { mnix[d - 1] dn; } }这段实现位于 numpy/random/src/distributions/distributions.c。它采用经典的“逐项条件二项采样”算法对前d-1个类别依次用条件概率pix[j] / remaining_p调用random_binomial剩余计数dn递减最后把剩余次数全部归给最后一个类别从而保证输出各维之和恰好等于n。类型声明中n使用RAND_INT_TYPE在 c_distributions.pxd 中对应int64_t将 Python 层传入的n提升为 64 位长整型避免了大试验次数场景下因平台int位宽不足导致的溢出或截断问题。此外multinomial方法的完整 docstringnumpy/random/_generator.pyx详细说明了其语义这是二项分布的多元推广pvals的最后一个元素总是被假定用来补齐剩余概率只要sum(pvals[..., :-1], axis-1) 1.0即可且支持n与pvals的广播以及size参数对输出形状的约束。np.dtype 传入自身的崩溃修复#25121该修复确保“将np.dtype对象再次传给自身”时不会崩溃。在底层数组标量发现逻辑中array_coercion.c 会先通过discover_dtype_from_pyobject判断对象是否为已知标量类型再进入handle_scalar处理。当 dtype 对象被误当作待转换的序列或标量处理时discover_dtype_from_pytypearray_coercion.c会尝试从 Python 类型映射 DType而np.dtype实例并非普通标量过去可能在类型发现阶段触发未处理的引用计数或空指针路径。该修复补上了这一边界分支属于典型的防御性健壮性改进——在实际代码中np.dtype(dtype)这种“幂等”写法常见于通用类型归一化工具函数中。Cython 3 的 intp 转换回归修复#25095该 PR 作为 backport 修复了 Cython 3 引入的intp转换回归。Cython 3 对整数类型的隐式转换检查比 Cython 0.29 更严格部分np.intp相关代码在升级到 Cython 3 后可能出现“Python int 与 C int64 混用”的编译告警甚至错误。1.26.2 通过 backport 将这些转换点显式化保证了 1.26.x 分支在更新版 Cython 下仍可正常编译扩展模块。这对使用 Cython 编写 NumPy 扩展的第三方开发者同样有借鉴意义升级工具链时需要注意整数位宽相关的显式转换。shuffle helpers 补充 noexcept#25115随机模块的 shuffle 辅助函数补充了缺失的noexcept声明。在 numpy/random 模块中shuffle 相关内联函数以 Cythoncdef形式暴露noexcept缺失意味着 Cython 会在每次调用后插入异常检查代码既降低性能又可能掩盖真实错误路径补齐后语义更明确——这些函数不抛出异常Cython 可以生成更干净的调用代码。这一改动虽小但反映了随机数热点路径上的性能与正确性意识。位域整数改为无符号#25118将内部 bitfield 整数统一改为无符号类型。位域bitfield在 C/C 中用于紧凑地打包布尔标志或小范围枚举若声明为有符号类型位运算和移位操作可能受符号扩展影响而产生未定义或平台相关行为。统一为无符号位域后标志位的按位与、或、测试操作在跨平台尤其是不同编译器间具有确定语义。构建系统与平台支持改进1.26.2 中 BLDbuild前缀的 PR 占比最高反映了维护团队在 1.26.x 分支上同步 Meson 构建体系演进与平台适配的努力。allow-noblas 默认值改为 true#25120这是本次构建配置中最值得关注的变化将 Meson 构建选项allow-noblas的默认值改为true。在仓库根目录的 meson.options 中可以确认当前默认状态option(blas, type: string, value: auto, description: BLAS library to use (default: autodetect based on blas-order)) option(lapack, type: string, value: auto, description: LAPACK library to use (default: autodetect based on lapack-order)) option(allow-noblas, type: boolean, value: true, description: Allow building with (slow!) internal fallback routines if no BLAS library is found) option(blas-order, type: array, value: [auto], description: Preferred search order for BLAS libraries (e.g., mkl, openblas, blis, blas)) option(lapack-order, type: array, value: [auto], description: Preferred search order for LAPACK libraries (e.g., mkl, openblas, lapack))allow-noblas为true意味着当系统上找不到可用的 BLAS 库时构建不再直接失败而是回退到 NumPy 内置的较慢的内部回退例程继续完成构建。这显著改善了从源码构建的用户体验——在没有预装 OpenBLAS/MKL 的纯净环境中pip install或 Meson 构建也能顺利产出可用的 NumPy。代价是这些内部回退例程的性能远低于优化 BLAS因此生产环境仍建议显式配置 BLAS。配合blas-order默认[auto]与lapack-order搜索顺序选项用户可以精确指定使用 mkl、openblas、blis 等具体实现。macOSXcode 15 下回退使用经典链接器#24977Apple 在 Xcode 15 中引入了新的链接器但对部分构建场景存在兼容性问题。1.26.2 在 macOS 构建中检测到新链接器问题时回退到经典classic链接器确保在最新 Xcode 环境下仍能稳定链接 NumPy 的 C 扩展。对于在 macOS 上自行编译 NumPy 或依赖 NumPy C API 的项目的开发者这是一个直接影响可构建性的修复。其他构建与平台修复ppc64 Power9 baseline 构建修复#25083当 CPU baseline 显式设为 Power9 时修复 ppc64 架构上的构建失败属于针对特定指令集基线baseline配置的定向修复。Meson 构建的 features.h 检测修复#25093修正 Meson 构建流程中对features.h的探测逻辑保证与既有 autotools/setuptools 构建路径行为一致。Netlib BLAS 检测改进#25117改善对 Netliblibblas/libcblas/liblapack的自动探测使系统自带 Netlib 参考实现的用户也能被正确识别从而启用相应的 LAPACK 功能而非误判为缺失。musllinux_aarch64 wheel 构建#25003为 Alpine Linuxmusl libc的 aarch64 架构补齐预编译 wheel 的构建支持扩展了官方分发的平台覆盖面。tempita.py 使用正确的 Python 解释器#24971修复代码生成阶段调用 tempita.py 时误用错误解释器的问题。NumPy 的.src模板文件如_multiarray_tests.c.src依赖 tempita 模板引擎在构建期展开使用正确的解释器是保证生成代码版本一致性的前提。Cython API 增强NPY_FR_GENERIC 枚举#24955本次发布中唯一带 ENH增强前缀的 PR为 Cython 使用者新增了NPY_FR_GENERIC的枚举值暴露。该常量定义在核心头文件 numpy/_core/include/numpy/ndarraytypes.h 中NPY_FR_GENERIC 14 /* unbound units, can convert to anything */它是 NumPy datetime64 单位frequency unit枚举的最高值语义为“未绑定单位可转换为任意单位”配合NPY_DATETIME_NUMUNITSNPY_FR_GENERIC 1与NPY_DATETIME_DEFAULTUNIT即NPY_FR_GENERIC使用。此前 Cython 代码若要引用该枚举需要自行手工定义常量1.26.2 起可直接从 C API 头文件导入避免了魔法数字和潜在的不一致。对于在 Cython 中处理np.datetime64通用单位转换的开发者这是一个消除重复定义的便利改进。维护与 CI 基础设施现代化多个 MAINT/CI 前缀的 PR 聚焦于让 1.26.x 分支的工程基础设施与 main 分支保持一致移除 Travis 测试新增 linux_qemu 动作#25108将原先依赖 Travis CI 的测试主要是跨架构 QEMU 模拟测试迁移到 GitHub Actions 的linux_qemu动作精简 CI 矩阵并统一托管平台。清理过时 job迁移 macOS 与 conda Azure job#25107移除不再需要的 CI job并把 macOS 与 conda 相关测试从 Azure Pipelines 迁移到 GitHub Actions。拆分 .github/workflows 以对齐 main#25071按 main 分支的组织方式拆分工作流文件降低维护成本。更新 .spin/cmds.py#25112同步 spin 开发命令工具spin 是 NumPy 基于 Meson 的本地开发辅助命令集的变更保持 1.26.x 开发体验与主线一致。移除 import_array() 中无帮助的错误替换#24972C API 初始化宏import_array()过去会把某些错误信息替换为自定义提示反而掩盖了真实错误原因该改动让原始错误直接透出便于 C 扩展作者定位初始化失败根源。更新 mailmap#25043维护贡献者身份映射。s390x 测试目标对齐#24814将test_dispatcher的 s390x 目标与_umath_tests_mtargets对齐修正架构相关测试配置。文档与许可信息改进两个 DOC 前缀的 PR 完善了分发包内的法律与许可信息在 wheel 中视觉区分主许可与捆绑许可#25113在构建出的 wheel 包内将 NumPy 主许可证与第三方捆绑组件如 OpenBLAS、LAPACK 等的许可证在排版上明确区分方便最终用户在安装目录中快速识别不同组件的许可条款。修正 OpenBLAS 的许可标识#25116修正 OpenBLAS 在文档与包元数据中的 SPDX 许可标识符确保许可声明准确无误。这类改动不直接影响运行行为但对 NumPy 作为被广泛再分发的基础库而言许可合规性同样是发布质量的重要组成部分。贡献者与工程规模根据发布说明1.26.2 共有13 位贡献者参与其中 5 位名单中带号是首次向 NumPy 提交补丁的新贡献者thalassemia、Charles Bousseau、Marcel Bargull、Mark Mentovai、William Ayd。本次共合并25 个 Pull Request。这一贡献者构成也体现了 NumPy 社区“资深维护者把关 新贡献者持续注入”的协作模式例如 stefan6419846、Andrew Nelson、Charles Harris、Matti Picus、Ralf Gommers、Sebastian Berg 等均为长期维护者而多个 backport PR 正是由维护者将 main 分支上的修复审慎地移植到 1.26.x 稳定分支。升级建议与验证方式对于仍停留在 1.26.0/1.26.1 的用户1.26.2 属于同系列内的小版本升级不包含破坏性 API 变更可以放心升级# 升级到 1.26 系列最新维护版本 pip install --upgrade numpy1.26.2,1.27 # 验证版本与 Python 兼容性 python -c import numpy; print(numpy.__version__)升级后建议重点回归验证以下场景它们正是本版本修复的核心区域np.random.default_rng().multinomial(...)在大n值下的结果正确性对应 #25119在自定义工具链中执行np.dtype(dtype)这类幂等类型归一化对应 #25121使用 Cython 3 编译依赖 NumPy C API 的扩展模块对应 #25095、#24955在 macOS尤其 Xcode 15 环境或 ppc64 机器上从源码构建对应 #24977、#25083。需要说明的是1.26.x 是 2.0 之前的最后一个次要版本系列仓库中 numpy_2_0_migration_guide.rst 已为后续迁移提供了完整指引在升级到 1.26.2 获得稳定基线之后可以据此规划向 NumPy 2.0 的迁移路径。源码构建用户还应留意 meson.options 中allow-noblas默认值已变为true这一行为变化以及 pyproject.toml 中声明的构建依赖约束。赞分享科学计算数据分析【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址https://gitcode.com/gh_mirrors/nu/numpy点击查看免费下载相关推荐NumPy 1.26.2 维护版变更解析回归修复、构建系统改进与 Cython 兼容性NumPy 1.26.2 维护版变更解析回归修复、构建系统改进与 Cython 兼容性 NumPy 1.26.2 是 1.26.x 系列中的一次维护版本发布科学计算数据分析NumPy 1.15.1 缺陷修复版发布说明回归修复、架构支持改进与升级指引NumPy 1.15.1 缺陷修复版发布说明回归修复、架构支持改进与升级指引 NumPy 1.15.1 是针对 1.15.0 正式版发布后所报告的一批 bug科学计算数据分析NumPy 1.24.1 维护版发布说明18 个 PR 修复回归与 SIMD 内存安全细节全解析NumPy 1.24.1 维护版发布说明18 个 PR 修复回归与 SIMD 内存安全细节全解析 本篇技术指南以 NumPy 1.24.1 Release N科学计算数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价