NumPy 1.10.0 版本发布说明深度解读:新特性、兼容性变更与弃用指南
发布时间:2026/9/20 6:21:15来源:尧图网络
NumPy 1.10.0 版本发布说明深度解读新特性、兼容性变更与弃用指南【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy本文以 NumPy 1.10.0 官方发布说明doc/source/release/1.10.0-notes.rst为主体结合当前仓库源码逐项解读该版本引入的矩阵链乘法优化、np.stack、broadcast_to、nanprod、运算符支持等新特性梳理默认转换规则变更等兼容性注意事项并追踪这些 API 至今在代码库中的实现位置帮助你理解 NumPy 历史演进脉络并规避升级迁移陷阱。版本概览与 HighlightsNumPy 1.10.0 于 2015 年发布支持 Python 2.6–2.7 与 3.2–3.5。该版本的核心亮点集中在构建系统灵活性、线性代数 API 扩充与 Python 3.5 新语法对接三个方面并行编译支持numpy.distutils通过setup.py build的--parallel/-j参数支持并行编译site.cfg 深度定制numpy.distutils可从site.cfg各分组读取额外编译参数np.linalg.multi_dot单次函数调用计算两个及以上数组的点积并自动选择最快求值顺序np.stack提供沿新轴拼接数组序列的通用接口与沿已有轴拼接的np.concatenate互补nanprod加入 nanfunctions 家族Python 3.5运算符支持对接 PEP 465 矩阵乘法运算符。移除的支持Dropped Support1.10.0 移除了若干长期维护负担较重或已被取代的模块与接口_dotblas模块被移除CBLAS 支持已并入multiarray模块testcalcs.py、polytemplate.py文件被移除npy_3kcompat.h中的npy_PyFile_Dup与npy_PyFile_DupClose被移除numpy/distutils/exec_command.py中的splitcmdline被移除numpy/distutils/command/config.py中的try_run与get_output被移除数组打印不再支持a._format属性np.genfromtxt移除skiprows与missing关键字注意此处的skiprows与后续版本保留的skip_header/skip_footer不同np.correlate移除old_behavior关键字。从当前仓库看_dotblas时代的 CBLAS 点积逻辑已完全融入multiarray/umath体系而np.correlate的old_behavior参数在当今 numpy/_core/_methods.py 等实现中已无踪迹。未来变更预告Future Changes1.10.0 明确预告了后续版本将落实的行为变化数组比较的 corner casearr1 arr2中涉及字符串或结构化 dtype 的许多边界情形原本返回标量1.10.0 起改为发出FutureWarning或DeprecationWarning未来将改为逐元素比较或直接报错np.lib.split空结果维度空数组结果始终为(0,)NumPy 1.11 将改为保留被分割数组的维度自 1.9 起已有FutureWarning但因 bug 有时未触发SafeEval类将在 1.11 移除alterdot与restoredot函数将在 1.11 移除。兼容性说明Compatibility notes默认转换规则变更inplace 操作改为same_kind这是 1.10.0 最值得注意的行为变更。inplace 操作如的默认 casting 规则从unsafe改为same_kindimport numpy as np n np.array([1, 2, 3]) # 整数数组 f np.array([1.5, 2.5, 3.5]) # 浮点数组 n f # TypeError此前版本会把浮点数静默截断为整数若确认代码不是 bug可用显式castingunsafe恢复旧行为np.add(n, f, outn, castingunsafe)unsafe默认值自 NumPy 1.7 起即已弃用此次正式落地为报错。这一规则至今仍是 NumPy 的默认行为见 numpy/_core/_add_newdocs.py 中对casting参数same_kind默认值的说明。版本字符串遵循 PEP 440开发版版本字符串由x.y.z.dev-githash改为x.y.z.dev0githash注意以符合 PEP 440 规范。这一约定延续至今——当前仓库的版本管理相关逻辑可参考 numpy/_version.py 与 numpy/_utils/_pep440.py。relaxed stride checking 默认开启1.10.2 回退NPY_RELAXED_STRIDE_CHECKING在 1.10.0 中默认设为 true。重要补充发布说明中的 UPDATE 注明由于向后兼容原因1.10.2 起该默认值已改回 false其成为默认值需要更多时间作为路线图的一部分同时增加了对非 C 连续数组的 f_contiguous 维度变化视图的弃用。1d 数组沿非 0 轴拼接抛出IndexError自 1.7 起axis ! 0触发DeprecationWarning1.10.0 起直接报错。相关 C 函数PyArray_ConcatenateArrays的行为同步变更。ravel、diagonal、diag现在保留子类型此前x.ravel()与np.ravel(x)行为不一致方法保留子类型而函数不保留。1.10.0 统一为函数与方法行为一致、保留子类型唯一例外是matrix——为向后兼容矩阵仍返回 1-D 数组。如需保留矩阵子类型请改用方法形式。当前实现见 numpy/_core/fromnumeric.py 与 numpy/_core/shape_base.py。rollaxis与swapaxes始终返回视图此前仅当轴顺序实际改变时才返回视图否则返回输入数组本身。现在一律返回视图。对应 C API 函数PyArray_SwapAxes同样始终返回视图。nonzero返回基础 ndarray此前 1-D 输入返回基础 ndarray高维输入保留子类行为不一致。现在统一返回基础 ndarray子类可通过自定义nonzero方法覆盖。C 函数PyArray_Nonzero同步变更。C APIdtype 结构新增哈希缓存成员PyArray_Descrdtype 结构体末尾新增一个用于缓存哈希值的成员对编写良好的应用程序无影响。recarray 字段返回类型统一此前 recarray 字段按属性访问与按下标访问的返回类型不一致字符串类型字段会返回 chararray。现在非结构化类型字段无论属性访问还是下标访问均返回ndarray结构化类型字段返回recarray嵌套结构化字段的dtype.type现在被继承。实际影响含尾随空白的字符串 recarray 行为会变化——chararray 会裁剪尾随空白而 ndarray 的字符串类型会保留。recarray 视图转换将 ndarray 视为 recarray 时dtype 会自动转换为np.record。此外用非结构化 dtype 查看 recarray 不再把结果类型转成 ndarray结果保持 recarray。ufunc 的out关键字接受元组现在可为多输出 ufunc 提供与输出数一一对应的元组np.modf(x, out(mantissa, exponent))单输出 ufunc 仍可传单个数组。此前把单个数组传给多输出 ufunc 并用于第一个输出的写法已弃用1.10.0 起发出DeprecationWarning未来将报错。其他兼容性细节字节串索引Python 3 中arr[bbytes]从ValueError改为IndexError含数组对象的掩码数组获取单个掩码项不再返回损坏的掩码数组而是返回该项的完全掩码版本median遇无效值警告并返回 nan与mean类似median与percentile在含 NaN 的切片上发出 Runtime 警告并返回 NaN忽略无效值请改用新增的nanmedian、nanpercentilenumpy.ma.testutils函数集变化其中大部分函数被移除仅保留小子集以维持向后兼容避免误用未针对掩码数组重定义的函数。新特性New Features从 site.cfg 读取额外编译标志此前定制依赖库与 NumPy 自身的编译只能修改 distutils 代码。1.10.0 起numpy.distutils会从site.cfg的每个分组读取以下标志配置项作用runtime_library_dirs/rpath设置运行时库目录可覆盖LD_LIBRARY_PATHextra_compile_args为源文件编译追加额外标志extra_link_args链接库时追加额外标志示例site.cfg[openblas] library_dirs /opt/openblas/lib runtime_library_dirs /opt/openblas/lib extra_compile_args -marchnative extra_link_args -Wl,--no-as-needed这至少部分补齐了用户层面的编译定制能力。np.cbrt实数浮点的立方根np.cbrt封装 C99 的cbrt函数。与np.power(x, 1./3.)相比它对负实数浮点有良好定义且速度更快np.cbrt([-8., 27.]) # array([-2., 3.])numpy.distutils支持并行编译向setup.py build传递--paralleln或-j n即可用 n 个并行进程编译扩展。限制并行化仅限单个扩展内部的多个文件因此基于 Cython 的项目每个扩展由单一文件构建不会受益。genfromtxt新增max_rows参数用于限制单次调用读取的最大行数可配合重复调用读取同一文件中的多个数组。该能力延续至今当前实现位于 numpy/lib/_npyio_impl.pygenfromtxt定义于第 1735 行附近max_rows校验与分块读取逻辑位于第 999–1078 行底层复用_loadtxt_chunksize分块机制data1 np.genfromtxt(data.csv, max_rows1000) data2 np.genfromtxt(data.csv, skip_header1000, max_rows1000)新函数np.broadcast_to按 NumPy 广播规则将数组手动广播到给定形状。功能与broadcast_arrays类似但只需单个数组且broadcast_arrays内部已改为调用broadcast_to。当前实现位于 numpy/lib/_stride_tricks_impl.pya np.arange(3) np.broadcast_to(a, (2, 3)) # array([[0, 1, 2], # [0, 1, 2]])测试警告用的上下文管理器clear_and_catch_warningsPython 发出警告后会在引发警告的模块属性__warningregistry__中记录该警告已发出之后无法再次发出导致警告测试脆弱若前面的测试已触发同一警告后续测试无法复现。该上下文管理器在进入时清除模块注册表中的警告记录、退出时重置使警告可重复触发。此工具长期保留在 numpy/testing/_private/utils.py 中供测试框架使用。cov新增fweights与aweights参数为协方差计算引入两类权重fweights每个观测向量重复出现的次数aweights每个观测向量的相对重要度或概率。Python 3.5 的运算符支持对接 PEP 465 的矩阵乘法运算符并新增等价函数matmul供测试及早期 Python 版本使用。发布说明明确该函数是初步实现可选参数的顺序与数量可能变化。如今matmul已是成熟的公开 API见 numpy/_core/multiarray.py 的导出。fft 函数新增norm参数默认归一化下正变换不缩放、逆变换按1/n缩放。设置normortho默认None可获得酉变换正逆变换均按1/sqrt(n)缩放np.fft.fft(x, normortho)改进Improvementsnp.digitize改用二分查找np.digitize改为基于np.searchsorted实现用二分查找代替线性查找bin 数量较大时扩展性显著提升且不再要求输入数组是 1 维的。np.poly将整数输入转换为浮点1 维整数输入数组会被转换为双精度浮点防止计算首一多项式时整数溢出。如需更高精度可传入 object 类型数组例如填充 Python int。np.interp支持周期函数新增period参数指定输入数据xp的周期数据会被归一化到给定周期并在xp两端各补一个端点以闭合前后周期从而获得正确的插值行为。np.pad支持更多输入类型constant_values现在接受 NumPy 数组与浮点值pad_width接受 NumPy 数组作为输入且其值非整型时会抛出异常。np.argmax/np.argmin支持out参数与ndarray.argmax/ndarray.argmin方法保持一致行为完全一致。检测并使用更多系统 C99 复数函数complex.h中的全部函数现在都被检测并新增以下函数的回退实现npy_ctan、npy_cacos、npy_casin、npy_catan、npy_ccosh、npy_csinh、npy_ctanh、npy_cacosh、npy_casinh、npy_catanh。由此返回值会有细微变化尤其是 corner case。np.loadtxt支持float.hex字符串支持形如0x1.921fb54442d18p1的十六进制浮点字符串注意这不是无符号整数的十六进制表示。np.isclose正确处理整数 dtype 的最小值为正确处理整型最小值的比较np.isclose现在会在比较时转换为浮点 dtype与np.allclose行为对齐。np.allclose内部改用np.isclosenp.allclose现在内部调用np.isclose从而继承equal_nanTrue时将 NaN 视为相等的比较能力并保留np.ma.MaskedArray等子类。np.genfromtxt正确处理大整数此前在 32 位系统上遇到大于2**31-1、在 64 位系统上遇到大于2**63-1的整数会崩溃并抛出OverflowError。现在能正确处理这些情况超过2**63-1的整数转换为浮点值。np.load/np.save增加 pickle 向后兼容标志两个函数新增控制 pickle 对象向后兼容的关键字参数使 Python 3 上的 NumPy 能加载 Python 2 生成、包含 object 数组的 npy 文件。MaskedArray 支持更复杂基类移除基类行为类似普通数组的内置假设设置/获取元素与区间会尊重基类对__setitem__、__getitem__的覆盖算术运算会尊重__add__、__sub__等的覆盖。变更Changesdotblas 功能并入 multiarraydot、inner、vdot的 cblas 版本已集成进 multiarray 模块其中vdot首次成为 multiarray 函数。gufunc 签名符合性检查更严格广义 ufunc 的输入现在按函数签名进行更严格校验所有核心维度必须出现在输入数组中相同标签的核心维度尺寸必须完全一致输出核心维度必须被指定——要么由同标签的输入核心维度给出要么由传入的输出数组给出。np.einsum返回的视图可写输入数组可写时np.einsum返回的视图现在可写。np.argmin跳过 NaT 值np.argmin现在跳过 datetime64 与 timedelta64 数组中的 NaT 值与np.min、np.argmax、np.max行为保持一致。弃用Deprecations涉及字符串或结构化 dtype 的数组比较通常数组比较执行逐元素比较并返回布尔数组但涉及字符串或结构化 dtype 时历史上可能返回标量。1.10.0 起这些比较发出FutureWarning或DeprecationWarning未来将改为一致行为# 当前1.10 之前行为 np.arange(2) foo # - False np.arange(2) foo # - Python 2 为 TruePython 3 报错 np.ones(2, dtypei4,i4) np.ones(2, dtypei4,i4,i4) # - False # 未来行为 np.arange(2) foo # - array([False, False]) np.arange(2) foo # - 报错字符串与数字不可排序 np.ones(2, dtypei4,i4) np.ones(2, dtypei4,i4,i4) # - [False, False]SafeEvalnumpy/lib/utils.py中的SafeEval类已弃用将在下一版本移除。alterdot、restoredot这两个函数不再做任何事已弃用按预告将在 1.11 移除。pkgload、PackageLoader这两种加载包的方式已弃用。corrcoef 的 bias、ddof 参数corrcoef中bias与ddof的值在相关系数蕴含的除法中相互抵消对返回值无实际影响因此弃用这两个参数含掩码数组版本ma.corrcoef。同时因bias移除导致allow_masked的位置会变化故弃用allow_masked作为位置参数传参未来它将变为仅关键字参数。dtype 字符串表示变化自 1.6 起从字符串表示如f4创建 dtype 时若尺寸与既有类型不符会发弃用警告并默认创建该类型的默认尺寸 dtype。1.10.0 起改为抛出TypeError。唯一例外是 object dtypeO4与O8仍发弃用警告该平台相关表示将在下一版本报错。为此np.dtype(object).str不再包含条目尺寸即返回|O而非|O4或|O8。结语从 1.10.0 看 NumPy 的演进脉络1.10.0 是 NumPy 承上启下的关键版本它系统性地清理了_dotblas等历史包袱落地了 inplace casting 规则收紧、PEP 440 版本规范等影响深远的兼容性决策同时为后续版本奠定了multi_dot矩阵链乘法最优括号化算法实现见 numpy/linalg/_linalg.py三数组特快路径_multi_dot_three与动态规划_multi_dot_matrix_chain_order至今仍在使用、np.stacknumpy/_core/shape_base.py、broadcast_tonumpy/lib/_stride_tricks_impl.py、nanprodnumpy/lib/_nanfunctions_impl.py等至今活跃的 API 基础。对需要维护老代码或进行跨版本迁移的开发者而言本篇列出的每一项兼容性变更与弃用都值得对照检查对研究 NumPy 设计演进的读者这些 API 在现代源码中的实现位置则提供了从历史决策到当前代码的完整追踪线索。【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网