NumPy 1.26 中文文档(五十四)

NumPy 1.26 中文文档(五十四) 原文:numpy.org/doc/ NumPy 1.26.0 发布说明 原文:numpy.org/doc/1.26/release/1.26.0-notes.html N

原文:numpy.org/doc/

NumPy 1.26.0 发布说明

原文:numpy.org/doc/1.26/release/1.26.0-notes.html

NumPy 1.26.0 版本是1.25.x 版本周期的延续,并增加了对Python 3.12.0 的支持。 Python 3.12 删除了distutils,因此为了支持它,您需要找到NumPy 使用的基于setup.py/distutils 的构建系统的替代方案。我们选择使用Meson 构建系统,这是第一个支持它的NumPy 版本。这也是第一个支持Cython 3.0 同时保持与0.29.X 兼容的版本。支持这两个升级是一个大型项目,此版本中更改了100 多个文件。完整的工作范围并未完整记录在变更日志中。特别感谢Ralf Gommers、Sayed Adel、Stfan van der Walt 和Matti Picus 在主开发分支上所做的大部分工作。

此版本的亮点包括:

支持Python 3.12.0。

与Cython 3.0.0 兼容。

用介子构建系统

SIMD 支持更新

f2py 修复、介子、bind(x) 支持

更新了Accelerate BLAS/LAPACK 库支持

该版本支持Python版本3.9至3.12。

新功能

numpy.array_api中的 Array API v2022.12 支持

numpy.array_api 现在完全支持v2022.12 版本的Array API 标准。请注意,这不包括标准可选fft 扩展。

(gh-23789)

支持更新的 Accelerate BLAS/LAPACK 库

macOS 13.3 中添加了更新的Accelerate BLAS/LAPACK 库支持,包括对ILP64(64 位整数)的支持。这支持arm64并将常见线性代数运算的性能提高了10倍。当您在构建时选择“加速”时,将自动使用版本13.3 或更高版本(如果可用)。

(gh-24053)

f2py的meson后端

编译模式下的f2py(即f2py -c)现在接受–backend meson 选项。这是自Python 3.12 以来的默认选项。旧版本默认情况下仍然使用–backend distutils。

为了在实际用例中支持这一点,在编译模式下,f2py 接受可以多次使用的–dep 标志。这映射到中间后端中的dependency() 调用,并且对distutils 后端没有影响。

对于仅使用f2py 作为代码生成器的用户,即没有-c 选项,没有任何变化。

(gh-24532)

为f2py添加了bind(c)支持

函数和子例程都可以用bind(c) 注释。 f2py 处理正确的类型映射并保留其他C 接口的唯一标签。

注意:f2py 绑定中不考虑bind(c, name=\’routine_name_other_than_fortran_routine\’) 。这是因为使用name 进行绑定(c)旨在保证C 和Fortran 中的名称相同,但在Python 和Fortran 中则不然。

(gh-24555)

改进

f2py 对 iso_c_binding 的支持

以前,要使用Fortran2003 的iso_c_binding 内置模块定义的类型映射,用户必须定义自己的自定义f2cmap 文件。这些类型映射现在由f2py 原生支持。

(gh-24555)

构建系统更改

在此版本中,NumPy 已切换为Meson 作为构建系统,并改用meson-python 作为构建后端。可以使用pip 和pypa/build 等标准工具来安装NumPy 和构建轮子。支持以下内容:

典型安装:pip install numpy 或(在克隆存储库中)pip install。

构建轮: python -m build (推荐),或pip Wheel。

可编辑安装: pip install -e 。

开发构建是通过使用spin:spin build 实现的自定义CLI 构建的。

所有常用的pip 和pypa/build 标志(例如–no-build-isolation)应该按预期工作。

NumPy 特定的构建自定义

许多特定于NumPy 的构建自定义已更改。不再支持控制BLAS/LAPACK、SIMD 和线程等选项的NPY_* 环境变量,以及用于在BLAS 和LAPACK 之间进行选择的site.cfg 文件。或者,可以通过pip/build 的配置设置界面将命令行标志传递到构建。这些标志列在存储库根目录中的meson_options.txt 文件中。详细文档将在最终1.26.0 版本发布之前发布。 SciPy 中的大多数构建自定义的工作方式与NumPy 大致相同,因此现在请参阅SciPy Build from Source 文档。

构建依赖

NumPy 的运行时依赖项没有改变,但它的构建依赖项已经改变。由于我们暂时发布Meson 和meson-python,因此出现了一些新的依赖项。检查pyproject.toml 的[build-system] 部分以获取更多信息。

故障排除

构建系统的这一变化相当大。如果遇到意外问题,您仍然可以通过将pyproject.toml.setuppy 复制到pyproject.toml 来使用基于setup.py 的构建作为临时解决方案(在Python 3.9-3.11 而不是3.12 上)。但是,对于更详细的问题,请在NumPy 问题跟踪器上提问。我们的目标是尽快弃用setup.py 版本,因此我们希望在1.26.0 发布周期的早期发现潜在的阻止程序。

贡献者

共有20 人为这个版本做出了贡献。任何名字后面带有“+”的人都是第一次为此贡献补丁。

@德韦斯尔

阿尔伯特·斯特皮+

巴士范比克

查尔斯·哈里斯

开发人员、生态系统、工程

菲利普·雷恩斯+

杰克·范德普拉斯

梁阳+

马丁·范·科奎克

马蒂·皮卡斯

梅丽莎·韦伯·门东萨

纳米香卡

内森·戈德鲍姆

拉尔夫·戈默斯

罗希特·戈斯瓦米

赛义德·阿德尔

塞巴斯蒂安·伯格

斯特凡·范德沃尔特

泰勒准备好了

沃伦·韦克瑟

合并的拉取请求

总共59 个拉取请求已合并到此版本中。

#24305: 维护:准备1.26.x 分支进行开发

#24308: 维护:从numpy 1.26 中的master 分支批量更新文件

#24322: CI:修复了1.26.x 分支中的轮子构建

#24326: 构建:将openblas 更新到新版本

#24327: 类型:简化的_NestedSequence.__getitem__ 签名

#24328: Bug:修复了引用计数选择泄漏

#24337: 测试:修复在没有BLAS/LAPACK 的构建上运行测试套件的问题

#24338: Bug:修复了Dirichlet 生成naan 的问题。

#24340: 维护:从master 分支更新dependentabot

#24342: 维护:重新添加NPY_RUN_MYPY_IN_TESTSUITE=1

#24353: 维护:从master 分支更新extbuild.py。

#24356: 测试:distutils 测试修复最近弃用的setuptools.

#24375: 维护:将cibuildwheel 更新到版本2.15.0。

#24381: 维护:修复了codespaces setup.sh 脚本

#24403: 增强功能:支持多目标构建中的提供者中间体

#24404: 构建:供应商meson-python 启用具有SIMD 支持的Windows 构建.

#24405: 构建,SIMD:中间CPU 调度程序的实现

#24406: 维护:删除版本控制者

版本#24409:NumPy 1.26.0b1 版本正在准备中。

#24453: 维护:修复了Sphinx 的上限版本。

#24455: 增强功能:为_ALIGN 宏添加前缀

#24456: 错误:清理警告[跳过azp][跳过圆圈][跳过travis][跳过…

#24460: 维护:升级至spin 0.5

#24495: 错误:asv dev 已被删除。请使用asv运行。

#24496: Bug:修复由于未修改的就地自动生成而导致介子构建失败的问题。

#24521: Bug:修复了需要运行shebang 的git-version 脚本的问题

#24522: BUG: 使用git_hash 的默认分配[跳过ci]

#24524: BUG: 修复了选择时的NPY_cast_info 错误处理

#24526: BUG: 修复了f2py 中的一般块处理

#24541: CI,TYP: 将mypy 升级到1.4.1。

#24542: BUG: 修复了具有预期长度的f2py 回归

#24544: MAINT: 集成fortranobject

#24545: TYP: 将kind 参数添加到numpy.isin 类型规范

#24561: BUG: 修复了屏蔽和未屏蔽结构化数组的比较。

#24590: CI: 从Cygwin 的导入库列表中排除DLL。

#24591: BLD: 修复了_umath_linalg 的依赖关系

#24594: MAINT: 停止使用ppc64le 进行测试。

#24602: 修复了没有BLD: meson-cpu: 功能的平台上的SIMD 支持

#24606: BUG: 将Cython 绑定指令更改为“False”。

#24613: ENH: 具有新的macOS Accelerate BLAS/LAPACK 接口,包括:

#24614: 更新构建文档以使用DOC: Meson

#24615: TYP: 将缺少的转换关键字添加到np.clip

#24616: TST: 将cython 测试从setup.py 转换为中间文件

#24617: MAINT: 已修复fromnumeric.pyi

#24622: Bug,ENH: 修复iso_c_binding 类型映射并修复bind(c)…

#24629: TYP: 允许binary_repr接受任何实现的对象.

#24630: 显式声明TYP: dtypes 和泛型是可哈希的

#24637: ENH: 使用testing.assert_type重构类型“显示”测试

#24638: MAINT: 将操作/签出从3.6.0 升级到4.0.0。

#24647: f2py 的ENH: 介子后端

#24648: MAINT: 重构Clang 部分加载解决方案

#24653: REL: 准备NumPy 版本1.26.0rc1。

#24659: 允许长双格式规范以避免BLD: 运行时。

#24665: BLD: 修复了random.mtrand 扩展中的错误,未链接到libnpyrandom

#24675: 构建:在Windows 上使用MSVC 为32 位Python 构建轮子

#24700: Build:修复了交叉编译期间的编译器选择问题

#24701: Bug:修复了f2py 中的复杂值数据语句处理

#24707: 类型:py3.12 添加缓冲区协议注释

#24718: 文档:修复了1.26.x 中的文档构建问题并更新了旋转文档.

新功能

numpy.array_api 中的 Array API v2022.12 支持

numpy.array_api 现在完全支持v2022.12 版本的Array API 标准。请注意,这不包括标准可选fft 扩展。

(gh-23789)

支持更新的 Accelerate BLAS/LAPACK 库

macOS 13.3 中添加了更新的Accelerate BLAS/LAPACK 库支持,包括对ILP64(64 位整数)的支持。这支持arm64并将常见线性代数运算的性能提高了10倍。如果您在构建时选择加速,则将自动使用13.3 及更高版本(如果可用)。

(gh-24053)

f2py 的 meson 端

f2py 现在在编译模式下接受–backend meson 选项(即f2py -c)。这是自Python 3.12 以来的默认选项。旧版本默认情况下仍然使用–backend distutils。

为了在实际用例中支持这一点,在编译模式下,f2py 接受一次或多次–dep 标志。这映射到中间后端中的dependency() 调用,并且在distutils 后端中不执行任何操作。

对于仅使用f2py 作为代码生成器的用户,没有任何变化。即不使用-c。

(gh-24532)

f2py 的 bind(c) 支持

函数和子例程都可以用bind(c) 注释。 f2py 处理正确的类型映射并保留其他C 接口的唯一标签。

注意:f2py 绑定设计时不接受bind(c, name=\’routine_name_other_than_fortran_routine\’) 。这是因为带有name 的bind(c) 旨在保证仅在C 和Fortran 中同名,而不是在Python 和Fortran 中同名。

(gh-24555)

numpy.array_api 中的 Array API v2022.12 支持

numpy.array_api 现在完全支持v2022.12 版本的Array API 标准。请注意,这不包括标准可选fft 扩展。

(gh-23789)

支持更新的 Accelerate BLAS/LAPACK 库

macOS 13.3 中添加了更新的Accelerate BLAS/LAPACK 库支持,包括对ILP64(64 位整数)的支持。这支持arm64并将常见线性代数运算的性能提高了10倍。当您在构建时选择“加速”时,将自动使用版本13.3 或更高版本(如果可用)。

(gh-24053)

f2py的meson后端

编译模式下的f2py(即f2py -c)现在接受–backend meson 选项。这是自Python 3.12 以来的默认选项。旧版本仍然默认为–backend distutils。

为了支持实际用例,在编译模式下,f2py 接受一次或多次–dep 标志。这映射到中间后端中的dependency() 调用,并且在distutils 后端中不执行任何操作。

对于仅使用f2py 作为代码生成器的用户,即不使用-c,没有任何变化。

(gh-24532)

f2py的bind(c)支持

函数和子例程都可以用bind(c) 注释。 f2py 处理正确的类型映射并保留其他C 接口的唯一标签。

注意:f2py 绑定设计时不接受bind(c, name=\’routine_name_other_than_fortran_routine\’) 。这是因为用name 进行绑定(c)只是为了保证C 和Fortran 中的同名,而不是Python 和Fortran 中的同名。

(gh-24555)

改进

f2py的iso_c_binding支持

以前,要使用Fortran2003 iso_c_binding 内置模块定义的类型映射,用户必须定义自己的自定义f2cmap 文件。这些类型映射现在由f2py 原生支持。

(gh-24555)

f2py的iso_c_binding支持

以前,要使用Fortran2003 iso_c_binding 内置模块定义的类型映射,用户必须定义自己的自定义f2cmap 文件。这些类型映射现在由f2py 原生支持。

(gh-24555)

构建系统更改

在此版本中,NumPy 已切换为Meson 作为构建系统,并改用meson-python 作为构建后端。可以使用pip 或pypa/build 等标准工具安装NumPy 或构建轮。支持以下内容:

典型安装:pip install numpy 或(在克隆存储库中)pip install。

构建轮: python -m build (推荐),或pip Wheel。

可编辑安装: pip install -e 。

开发构建是通过使用spin:spin build 实现的自定义CLI 构建的。

所有常用的pip 和pypa/build 标志(例如–no-build-isolation)应该按预期工作。

NumPy 特定的构建定制

自定义NumPy 构建的许多具体方式已经改变。不再支持控制BLAS/LAPACK、SIMD、线程和其他选项的NPY_* 环境变量,以及用于在BLAS 和LAPACK 之间进行选择的site.cfg 文件。或者,可以通过pip/build 的配置设置界面将命令行标志传递到构建。这些标志列在存储库根目录中的meson_options.txt 文件中。详细文档将在最终1.26.0 版本发布之前发布。 SciPy 中的大多数构建自定义的工作方式与NumPy 大致相同,因此现在请参阅SciPy Build from Source 文档。

构建依赖

NumPy 的运行时依赖项没有改变,但它的构建依赖项已经改变。由于我们暂时发布Meson 和meson-python,因此出现了一些新的依赖项。检查pyproject.toml 的[build-system] 部分以获取更多信息。

故障排除

这个构建系统变化很大。如果遇到意外问题,您仍然可以使用基于setup.py 的构建作为解决方法,方法是将pyproject.toml.setuppy 复制到pyproject.toml (在Python 3.9-3.11 而不是3.12 上)。但是,请在NumPy 问题跟踪器中提供您的问题的详细信息。我们的目标是尽快弃用setup.py 版本,因此我们希望在1.26.0 发布周期的早期找到潜在的阻止程序。

NumPy 特定的构建定制方式

自定义NumPy 构建的许多具体方式已经改变。不再支持控制BLAS/LAPACK、SIMD、线程和其他选项的NPY_* 环境变量,以及用于在BLAS 和LAPACK 之间进行选择的site.cfg 文件。或者,可以通过pip/build 的配置设置界面将命令行标志传递到构建。这些标志列在存储库根目录中的meson_options.txt 文件中。详细文档将在最终1.26.0 版本发布之前发布。 SciPy 中的大多数构建自定义的工作方式与NumPy 大致相同,因此现在请参阅SciPy Build from Source 文档。

构建依赖

NumPy 的运行时依赖项没有改变,但它的构建依赖项已经改变。由于我们暂时发布Meson 和meson-python,因此出现了一些新的依赖项。检查pyproject.toml 的[build-system] 部分以获取更多信息。

故障排除

这个构建系统变化很大。如果遇到意外问题,您仍然可以使用基于setup.py 的构建作为解决方法,方法是将pyproject.toml.setuppy 复制到pyproject.toml (在Python 3.9-3.11 而不是3.12 上)。但是,请在NumPy 问题跟踪器中提供您的问题的详细信息。我们的目标是尽快弃用setup.py 版本,因此我们希望在1.26.0 发布周期的早期找到潜在的阻止程序。

贡献者

此版本有20 名贡献者。名字后面带“+”的人是第一次贡献补丁。

@德韦斯尔

阿尔伯特·斯特皮+

巴士范比克

查尔斯·哈里斯

开发人员、生态系统、工程

菲利普·雷恩斯+

杰克·范德普拉斯

梁阳+

马丁·范·科奎克

马蒂·皮卡斯

梅丽莎·韦伯·门东萨

纳米香卡

内森·戈德鲍姆

拉尔夫·戈默斯

罗希特·戈斯瓦米

赛义德·阿德尔

塞巴斯蒂安·伯格

斯特凡·范德沃尔特

泰勒准备好了

沃伦·韦克瑟

合并的拉取请求

总共59 个拉取请求已合并到此版本中。

#24305: 维护:准备开发1.26.x 分支

#24308: 维护:从numpy 1.26 中的main 进行大量文件更新

#24322: CI:修复了1.26.x 分支中的轮子构建

#24326: 构建:将openblas 更新到新版本

#24327: 类型:简化的_NestedSequence.__getitem__ 签名

#24328: 错误修复:修复了引用计数选择泄漏

#24337: 测试:修复在没有BLAS/LAPACK 的构建上运行测试套件的问题

#24338: 错误修复:随机:修复了Dirichlet 生成Nan 的问题。

#24340: 维护:从主要依赖机器人更新

#24342: 维护:重新添加NPY_RUN_MYPY_IN_TESTSUITE=1

#24353: 维护:从主要版本更新extbuild.py。

#24356: 测试:固定距离

utils 测试以适应最近 setuptools 中的弃用…
#24375: 维护:更新 cibuildwheel 到版本 2.15.0
#24381: 维护:修复 codespaces setup.sh 脚本
#24403: 增强:为多目标构建支持添加 meson 供应商
#24404: 构建:为使 Windows 构建支持 SIMD 而供应商 meson-python…
#24405: 构建,SIMD:meson CPU 调度器实现
#24406: 维护:移除 versioneer
#24409: 发布:为 NumPy 1.26.0b1 版本做准备。
#24453: 维护:固定 sphinx 的上限版本。
#24455: 增强:为 _ALIGN 宏添加前缀
#24456: 错误修复:清理警告 [跳过 azp][跳过 circle][跳过 travis][跳过…
#24460: 维护:升级到 spin 0.5
#24495: 错误修复:asv dev 已被移除,请使用 asv run。
#24496: BUG: 修复 meson 构建失败,因为 inplace 自动生成的内容未更改…
#24521: BUG: 修复 git-version 脚本的问题,需要 shebang 才能运行
#24522: BUG: 为 git_hash 使用默认赋值 [跳过 ci]
#24524: BUG: 修复 choose 中的 NPY_cast_info 错误处理
#24526: BUG: 修复 f2py 中的 common block 处理
#24541: CI,TYP: 将 mypy 升级至 1.4.1
#24542: BUG: 修复假定长度 f2py 回归问题
#24544: MAINT: 统一 fortranobject
#24545: TYP: 向 numpy.isin 类型规范添加 kind 参数
#24561: BUG: 修复掩码和未掩码结构化数组之间的比较
#24590: CI: 在 Cygwin 上排除导入库的 DLL 列表。
#24591: BLD: 修复_umath_linalg的依赖关系
#24594: MAINT: 停止在 ppc64le 上进行测试。
#24602: BLD: meson-cpu: 修复在没有功能的平台上的 SIMD 支持
#24606: BUG: 将 Cython 的binding指令更改为“False”。
#24613: ENH: 采用新的 macOS Accelerate BLAS/LAPACK 接口,包括…
#24614: DOC: 更新构建文档以使用 Meson
#24615: TYP: 向np.clip添加缺失的casting关键字
#24616: TST: 将 cython 测试从 setup.py 转换为 meson
#24617: MAINT: 修复fromnumeric.pyi
#24622: BUG, ENH: 修复iso_c_binding类型映射和修复bind(c)…
#24629: TYP: 允许binary_repr接受任何实现…
#24630: TYP: 明确声明dtype和generic可哈希
#24637: ENH: 使用typing.assert_type重构类型“reveal”测试
#24638: MAINT: 将 actions/checkout 从 3.6.0 升级到 4.0.0
#24647: ENH: f2py的meson后端
#24648: MAINT: 重构 Clang 的部分加载解决方法
#24653: REL: 为 NumPy 1.26.0rc1 版本做准备。
#24659: BLD: 允许指定 long double 格式以避免运行时问题…
#24665: BLD: 修复 random.mtrand 扩展中的 bug,不链接 libnpyrandom
#24675: BLD: 在 Windows 上为 32 位 Python 构建 wheels,使用 MSVC
#24700: BLD: 修复交叉编译过程中编译器选择的问题
#24701: BUG: 修复 f2py 中对复数值的数据语句处理
#24707: TYP: 为 py3.12 缓冲区协议添加注释
#24718: DOC: 修复 1.26.x 上的一些文档构建问题,并更新 spin 文档…

NumPy 1.25.2 发布说明

原文:numpy.org/doc/1.26/release/1.25.2-notes.html

NumPy 1.25.2 是一个维护版本,修复了在 1.25.1 发布后发现的错误和回归。这是 1.25.x 系列中计划的最后一个版本,下一个版本将是 1.26.0,将使用 meson 构建系统并支持 Python 3.12。这个版本支持的 Python 版本是 3.9-3.11。

贡献者

一共有 13 人为这个版本做出了贡献。名字后面带有“+”的人第一次贡献了补丁。

Aaron Meurer
Andrew Nelson
Charles Harris
Kevin Sheppard
Matti Picus
Nathan Goldbaum
Peter Hawkins
Ralf Gommers
Randy Eckenrode +
Sam James +
Sebastian Berg
Tyler Reddy
dependabot[bot]

合并的拉取请求

一共有 19 个拉取请求被合并到这个版本中。

#24148: 维护:为进一步开发准备 1.25.x
#24174: 增强:改善 clang-cl 兼容性
#24179: 维护:升级各种构建依赖项。
#24182: 构建:在 macOS 上使用 -ftrapping-math 与 Clang
#24183: 错误:在 ufunc_at 快速路径中正确处理负索引
#24184: 错误:在 setflags 中处理 PyObject_IsTrue 和 PyObject_Not 错误
#24185: 错误:直方图小范围鲁棒性
#24186: 维护:从主分支更新 meson.build 文件
#24234: 维护:从 np.__all__ 中排除 min、max 和 round
#24241: 维护:Dependabot 更新
#24242: 错误:修复 np.array_api.take 的签名
#24243: 构建:将 OpenBLAS 更新到一个中间提交
#24244: 错误:修复 str(scalar) 中的引用计数泄漏。
#24245: 错误:修复无效函数指针转换错误
#24255: 错误:分离出用于内存策略警告的缓慢 getenv 调用
#24292: CI:在 cirrus.star 中更正 URL [跳过 cirrus]
#24293: 错误:在 scalartypes 中修复 C 类型
#24294: 错误:不要修改 ufunc_at 的输入
#24295: 错误:进一步修复索引循环并添加测试

贡献者

一共有 13 人为这个版本做出了贡献。名字后面带有“+”的人第一次贡献了补丁。

Aaron Meurer
Andrew Nelson
Charles Harris
Kevin Sheppard
Matti Picus
Nathan Goldbaum
Peter Hawkins
Ralf Gommers
Randy Eckenrode +
Sam James +
Sebastian Berg
Tyler Reddy
dependabot[bot]

合并的拉取请求

本次发布共合并了 19 个拉取请求。

#24148: MAINT: 为 1.25.x 做进一步开发准备
#24174: ENH: 改进 clang-cl 兼容性
#24179: MAINT: 升级各种构建依赖项。
#24182: BLD: 在 macOS 上使用-ftrapping-math与 Clang
#24183: BUG: 在 ufunc_at 快速路径中正确处理负索引
#24184: BUG: 在 setflags 中处理 PyObject_IsTrue 和 PyObject_Not 错误
#24185: BUG: 直方图小范围鲁棒性
#24186: MAINT: 从主分支更新 meson.build 文件
#24234: MAINT: 从np.__all__中排除 min、max 和 round
#24241: MAINT: Dependabot 更新
#24242: BUG: 修复 np.array_api.take 的签名
#24243: BLD: 将 OpenBLAS 更新到一个中间提交
#24244: BUG: 修复 str(scalar)中的引用计数泄漏。
#24245: BUG: 修复无效函数指针转换错误
#24255: BUG: 分离出用于内存策略警告的缓慢getenv调用
#24292: CI: 修正 cirrus.star 中的 URL [跳过 cirrus]
#24293: BUG: 修复 scalartypes 中的 C 类型
#24294: BUG: 不要修改 ufunc_at 的输入
#24295: BUG: 进一步修复索引循环并添加测试

NumPy 1.25.1 发布说明

原文:numpy.org/doc/1.26/release/1.25.1-notes.html

NumPy 1.25.1 是一个维护版本,修复了 1.25.0 发布后发现的错误和回归问题。此版本支持的 Python 版本为 3.9-3.11。

贡献者

总共有 10 人为此版本做出了贡献。名字后带有“+”的人第一次贡献了补丁。

Andrew Nelson
Charles Harris
Developer-Ecosystem-Engineering
Hood Chatham
Nathan Goldbaum
Rohit Goswami
Sebastian Berg
Tim Paine +
dependabot[bot]
matoro +

合并的拉取请求

总共有 14 个拉取请求合并到此版本中。

#23968: MAINT: 为 1.25.x 版本做进一步开发准备
#24036: BLD: 将长双精度识别移植到 meson 的 C 语言中
#24037: BUG: 修复 reduction return NULL为goto fail
#24038: BUG: 避免在 array.astype()中出现未定义行为
#24039: BUG: 确保__array_ufunc__在没有传递任何 kwargs 的情况下正常工作
#24117: MAINT: 固定 urllib3 以避免 anaconda-client bug。
#24118: TST: 在 Pyodide 工作流中固定 pydantic<2
#24119: MAINT: 将 pypa/cibuildwheel 从 2.13.0 升级到 2.13.1
#24120: MAINT: 将 actions/checkout 从 3.5.2 升级到 3.5.3
#24122: BUG: 使用 SIMD 进行乘法或除法时,没有完整向量可以…
#24127: MAINT: 对 IS_MUSL 进行测试,关闭#24074
#24128: BUG: 仅在维度发生变化时暂时替换 dtype
#24129: MAINT: 将 actions/setup-node 从 3.6.0 升级到 3.7.0
#24134: BUG: 修复 f2py 模块中的私有过程

贡献者

总共有 10 人为此版本做出了贡献。名字后带有“+”的人第一次贡献了补丁。

Andrew Nelson
Charles Harris
Developer-Ecosystem-Engineering
Hood Chatham
Nathan Goldbaum
Rohit Goswami
Sebastian Berg
Tim Paine +
dependabot[bot]
matoro +

合并的拉取请求

总共有 14 个拉取请求合并到此版本中。

#23968: MAINT: 为 1.25.x 版本做进一步开发准备
#24036: BLD: 将长双精度识别移植到 meson 的 C 语言中
#24037: BUG: 修复 reduction return NULL为goto fail
#24038: BUG: 避免在 array.astype()中出现未定义行为
#24039: BUG: 确保 __array_ufunc__ 在不传递任何 kwargs 的情况下正常工作
#24117: MAINT: 固定 urllib3 以避免 anaconda-client 的 bug。
#24118: TST: 在 Pyodide 工作流中固定 pydantic<2
#24119: MAINT: 将 pypa/cibuildwheel 从 2.13.0 升级到 2.13.1
#24120: MAINT: 将 actions/checkout 从 3.5.2 升级到 3.5.3
#24122: BUG: 使用 SIMD 进行乘法或除法时,如果没有完整的向量…
#24127: MAINT: 测试 IS_MUSL,关闭 #24074
#24128: BUG: 仅在维度发生变化时临时替换 dtype
#24129: MAINT: 将 actions/setup-node 从 3.6.0 升级到 3.7.0
#24134: BUG: 修复 f2py 模块中的私有程序

NumPy 1.25.0 发布说明

原文:numpy.org/doc/1.26/release/1.25.0-notes.html

NumPy 1.25.0 版本持续改进处理和提升数据类型(dtypes)的工作,增加执行速度,并澄清文档。还进行了为未来 NumPy 2.0.0 版本做准备的工作,导致大量新的和过时的弃用。亮点包括:

支持 MUSL,现在有 MUSL wheels。
支持富士通 C/C++ 编译器。
现在支持对象数组在 einsum 中使用
支持原地矩阵乘法 (@=)。

当 Python 3.12 发布时,我们将发布 NumPy 1.26 版本。这是必要的,因为 Python 3.12 放弃了 distutils,我们将转而使用 meson 进行未来构建。下一个主要发布版本将是 NumPy 2.0.0。我们计划 2.0 系列仍将支持针对早期 NumPy 版本构建的下游项目。

本版本支持的 Python 版本为 3.9-3.11。

弃用

np.core.MachAr 已弃用。这是私有 API。在 np.core 中定义的名称通常应视为私有。
(gh-22638)
np.finfo(None) 已弃用。
(gh-23011)
np.round_ 已弃用。请改用 np.round。
(gh-23302)
np.product 已弃用。请改用 np.prod。
(gh-23314)
np.cumproduct 已弃用。请改用 np.cumprod。
(gh-23314)
np.sometrue 已弃用。请改用 np.any。
(gh-23314)
np.alltrue 已弃用。请改用 np.all。
(gh-23314)
仅 ndim-0 数组被视为标量。NumPy 曾将所有大小为 1 的数组(例如,np.array([3.14]))视为标量。将来,这将限制为 ndim 0 的数组(例如,np.array(3.14))。以下表达式将报告弃用警告:
a = np.array([3.14])
float(a) # better: a[0] to get the numpy.float or a.item()
b = np.array([[3.14]])
c = numpy.random.rand(10)
c[0] = b # better: c[0] = b[0, 0]
(gh-10615)
np.find_common_type已被弃用。numpy.find_common_type现已被弃用,应该用numpy.result_type或numpy.promote_types替换。大多数用户将find_common_type的第二个scalar_types参数保留为[],在这种情况下,np.result_type和np.promote_types都更快且更可靠。当不使用scalar_types时,主要区别在于替代故意将非本机字节顺序转换为本机字节顺序。此外,find_common_type返回object dtype 而不是失败的提升。当输入不全为数值时,这会导致差异。重要的是,对于例如时间间隔/日期时间这样的情况,NumPy 提升规则目前有时会令人惊讶。
当scalar_types参数不是[]时,情况会变得更加复杂。在大多数情况下,使用np.result_type并传递 Python 值0,0.0或0j的结果与在scalar_types中使用int,float或complex相同。
当构建scalar_types时,np.result_type是正确的替代方案,可以传递标量值如np.float32(0.0)。传递除 0 以外的值可能会导致值检查行为(np.find_common_type从未使用过,NEP 50 将来可能会更改)。在这种情况下,主要的行为变化可能是当数组类型为有符号整数而标量类型为无符号整数时。
如果您不确定如何替换对scalar_types的使用,或者可能存在非数值 dtype,请不要犹豫打开一个 NumPy 问题寻求帮助。
(gh-22539)

已过时的弃用行为

np.core.machar和np.finfo.machar已被移除。
(gh-22638)
当 dtype 不是数值时,+arr现在会引发错误(正数未定义)。
(gh-22998)
现在必须将序列传递给堆叠函数家族(stack,vstack,hstack,dstack和column_stack)。
(gh-23019)
np.clip现在默认使用相同类型转换。在 NumPy 1.17 中,回退到不安全的转换已被弃用。
(gh-23403)
np.clip现在会传播作为min或max传递的np.nan值。以前,标量 NaN 通常被忽略。这在 NumPy 1.17 中已被弃用。
(gh-23403)
np.dual子模块已被移除。
(gh-23480)
NumPy 现在总是忽略数组类似对象的序列行为(定义了数组协议之一)。(从 NumPy 1.20 开始弃用)
(gh-23660)
在astype或asarray等数组创建函数中,当转换为子数组 dtype 时出现的FutureWarning现已最终确定。现在的行为总是与将子数组 dtype 包装成单个字段时相同(这是以前的解决方法)。 (自 NumPy 1.20 起的 FutureWarning)
(gh-23666)
==和!=警告已最终确定。 数组上的==和!=运算符现在总是:

引发在比较期间发生的错误,例如当数组具有不兼容的形状时(np.array([1, 2]) == np.array([1, 2, 3]))。
当值在根本上不可比较时(例如具有不同的 dtype)返回一个全为True或全为False的数组。 一个例子是np.array([\”a\”]) == np.array([1])。
这模仿了 Python 在比较不兼容类型时返回False和True的行为,例如\”a\” == 1和\”a\” != 1。 很长一段时间以来,这些都会产生DeprecationWarning或FutureWarning。
(gh-22707)
已移除对 Nose 的支持。 NumPy 在 2018 年转而使用 pytest,而 nose 已经多年未得到维护。 我们保留了 NumPy 的 nose 支持,以避免破坏可能仍在使用它而尚未转换为 pytest 或其他测试框架的下游项目。 随着 Python 3.12 的到来,未打补丁的 nose 将引发错误。 是时候继续前进了。
已移除的装饰器:

raises

setastest
skipif
knownfailif
已弃用
参数化
_needs_refcount
这些不应与具有类似名称的 pytest 版本混淆,例如 pytest.mark.slow,pytest.mark.skipif,pytest.mark.parametrize。
已移除的函数:

测试员
import_nose
run_module_suite
(gh-23041)
已移除numpy.testing.utils的 shim。 自 2019 年以来,从numpy.testing.utils的 shim 导入已被弃用,现在已删除该 shim。 所有导入应直接从numpy.testing进行。
(gh-23060)
已移除禁用调度的环境变量。 已移除对NUMPY_EXPERIMENTAL_ARRAY_FUNCTION环境变量的支持。 此变量禁用了__array_function__的调度。
(gh-23376)
已移除对y=作为out=的别名的支持。 fix,isposinf和isneginf函数允许使用y=作为out=的(已弃用的)别名。 这不再受支持。
(gh-23376)

兼容性说明

busday_count方法现在正确处理begindates晚于enddates的情况。 以前,即使文档规定始日期始终不包括在内,enddates也会被包括在内。
(gh-23229)
当使用np.equal或np.not_equal比较日期时间和时间间隔时,numpy 以前允许使用casting=\”unsafe\”进行比较。这个操作现在会失败。通过使用dtype关键字参数强制输出 dtype 可以使操作成功,但我们不建议这样做。
(gh-22707)
当使用np.load从文件句柄加载数据时,如果句柄位于文件末尾,可能会通过多次调用np.load读取多个数组,numpy 以前会在allow_pickle=False时引发ValueError,在allow_pickle=True时引发OSError。现在无论哪种情况都会引发EOFError。
(gh-23105)

使用mode=wrap的np.pad用原始数据的严格倍数填充

基于早期版本的pad的代码,使用mode=\”wrap\”,当填充大小大于初始数组时,将返回不同的结果。

使用mode=wrap的np.pad现在总是用原始数据的严格倍数填充空间,即使填充大小大于初始数组。

(gh-22575)

移除了 Cython 中的long_t和ulong_t

long_t和ulong_t是longlong_t和ulonglong_t的别名,令人困惑(Python 2 的遗留物)。这个更改可能会导致错误:

\’long_t\’ is not a type identifier
\’ulong_t\’ is not a type identifier

我们推荐使用诸如cnp.int64_t这样的位大小类型,或者使用在 32 位系统上为 32 位,在 64 位系统上为 64 位的cnp.intp_t(这对索引最兼容)。如果需要 C long,请使用普通的long或npy_long。cnp.int_t也是long(NumPy 的默认整数)。但是,在 64 位 Windows 上,long是 32 位的,即使在 NumPy 中我们可能希望调整这一点。(如果您对此感到好奇,请随时联系 NumPy 开发人员。)

(gh-22637)

更改了对ufunc的错误消息和类型的错误axes参数

当向ufunc(…, axes=[…])传递错误的axes值时,错误消息和类型已更改。现在的消息更能指示问题,如果值不匹配,则会引发AxisError。对于无效的输入类型仍会引发TypeError。

(gh-22675)

定义了__array_ufunc__的类数组现在可以在作为where使用时覆盖 ufuncs

如果numpy.ufunc的where关键字参数是numpy.ndarray的子类,或者是定义了numpy.class.__array_ufunc__的鸭子类型,它可以使用与输入和输出参数相同的机制覆盖 ufunc 的行为。请注意,为了使其正常工作,where.__array_ufunc__实现将必须解包where参数以将其传递给ufunc的默认实现,或者对于numpy.ndarray子类,在使用super().__array_ufunc__之前。

(gh-23240)

现在默认情况下,针��NumPy C API 的编译是向后兼容的

NumPy 现在默认公开 C-API 的向后兼容子集。这使得使用oldest-supported-numpy变得不必要。库可以通过在包含 NumPy 之前或通过向编译器传递等效的-D选项来覆盖默认的最小版本,以便与使用:

#define NPY_TARGET_VERSION NPY_1_22_API_VERSION

NumPy 1.25 的默认值是NPY_1_19_API_VERSION。因为 NumPy 1.19 C API 与 NumPy 1.16 相同,因此生成的程序将与 NumPy 1.16 兼容(从 C-API 的角度来看)。这个默认值将在未来的非 bug 修复版本中增加。您仍然可以针对较旧的 NumPy 版本进行编译,并在更新的版本上运行。

更多详细信息请参见对于下游包作者。

(gh-23528)

新功能

np.einsum现在接受具有object dtype 的数组

代码路径将在对象 dtype 数组上调用 python 运算符,就像np.dot和np.matmul一样。

(gh-18053)

增加了对原地矩阵乘法的支持

现在可以通过@=运算符执行原地矩阵乘法。

>>> import numpy as np
>>> a = np.arange(6).reshape(3, 2)
>>> print(a)
[[0 1]
[2 3]
[4 5]]
>>> b = np.ones((2, 2), dtype=int)
>>> a @= b
>>> print(a)
[[1 1]
[5 5]
[9 9]]

(gh-21120)

添加了NPY_ENABLE_CPU_FEATURES环境变量

用户现在可以选择在运行时通过指定NPY_ENABLE_CPU_FEATURES环境变量来启用内置 CPU 功能的子集。请注意,这些指定的功能必须在基线之外,因为基线始终被假定。如果尝试启用 CPU 不支持的功能,或者 NumPy 未构建的功能,将会引发错误。

(gh-22137)

NumPy 现在有一个np.exceptions命名空间

NumPy 现在有一个专用的命名空间,使大多数异常和警告可用。所有这些仍然在主命名空间中可用,尽管一些可能会在将来慢慢移动。这样做的主要原因是增加可发现性并添加未来的异常。

(gh-22644)

np.linalg 函数返回 NamedTuples

返回元组的 np.linalg 函数现在返回命名元组。这些函数是 eig()、eigh()、qr()、slogdet() 和 svd()。在这些函数返回具有特定关键字参数的非元组的实例中,返回类型保持不变(例如 svd(compute_uv=False))。

(gh-22786)

np.char 中的字符串函数与 NEP 42 自定义数据类型兼容

现在可以将表示 Unicode 字符串或字节字符串的自定义数据类型传递给 np.char 中的字符串函数。

(gh-22863)

可以从字符串抽象数据类型类创建字符串数据类型实例

现在可以创建具有大小的字符串数据类型实例,而无需使用数据类型的字符串名称。例如,type(np.dtype(\’U\’))(8) 将创建一个等效于 np.dtype(\’U8\’) 的数据类型。在编写处理字符串数据类型类的通用代码时,此功能非常有用。

(gh-22963)

现在支持富士通 C/C++ 编译器

添加了对富士通编译器的支持。要使用富士通编译器构建,请运行:

python setup.py build -c fujitsu

现在支持 SSL2

添加了对 SSL2 的支持。SSL2 是一个提供 OpenBLAS 兼容 GEMM 函数的库。要启用 SSL2,需要编辑 site.cfg 并使用富士通编译器构建。请参阅 site.cfg.example。

(gh-22982)

改进

NDArrayOperatorsMixin 指定没有 __slots__

NDArrayOperatorsMixin 类现在指定不包含 __slots__,确保子类现在可以在 Python 中使用此功能。

(gh-23113)

修复复数零的幂

np.power ��在为复数返回不同的结果 0^{非零}。请注意,当指数的实部大于零时才定义该值。以前,除非虚部严格为零,否则返回 NaN。返回值为 0+0j 或 0-0j。

(gh-18535)

新的 DTypePromotionError

NumPy 现在有一个新的 DTypePromotionError,当两个数据类型无法提升为公共数据类型时使用,例如:

np.result_type(\”M8[s]\”, np.complex128)

引发此新异常。

(gh-22707)

np.show_config 使用来自 Meson 的信息

构建和系统信息现在包含来自 Meson 的信息。np.show_config 现在具有一个新的可选参数 mode,可帮助自定义输出。

(gh-22769)

修复 np.ma.diff 在使用参数 prepend/append 时未保留掩码的问题。

使用参数 prepend 和/或 append 调用 np.ma.diff 现在返回一个保留输入掩码的 MaskedArray。

以前,返回没有掩码的 MaskedArray。

(gh-22776)

修正了 Cython 中 NumPy C-API 的错误处理

许多为在 Cython 中使用而定义的 NumPy C 函数缺乏正确的错误指示器,如 except -1 或 except *。现在已经添加了这些。

(gh-22997)

直接生成随机数生成器的能力

numpy.random.Generator.spawn 现在允许通过 numpy.random.SeedSequence.spawn 机制直接生成新的独立子生成器。numpy.random.BitGenerator.spawn 对底层位生成器执行相同操作。

此外,numpy.random.BitGenerator.seed_seq 现在直接访问用于初始化位生成器的种子序列。例如,这允许:

seed = 0x2e09b90939db40c400f8f22dae617151
rng = np.random.default_rng(seed)
child_rng1, child_rng2 = rng.spawn(2)
# safely use rng, child_rng1, and child_rng2

以前,这是很难做到的,没有显式传递 SeedSequence。请参阅 numpy.random.SeedSequence 获取更多信息。

(gh-23195)

numpy.logspace 现在支持非标量 base 参数

numpy.logspace 的 base 参数现在可以是类似数组的,如果可以与 start 和 stop 参数进行广播。

(gh-23275)

np.ma.dot() 现在支持非 2d 数组

以前 np.ma.dot() 仅在 a 和 b 都是 2d 时才起作用。现在它也适用于非 2d 数组,如 np.dot()。

(gh-23322)

显式显示 .npz 文件的键在 repr 中

打印 NpzFile 时显示加载的 .npz 文件的键。

>>> npzfile = np.load(\’arr.npz\’)
>>> npzfile
NpzFile \’arr.npz\’ with keys arr_0, arr_1, arr_2, arr_3, arr_4…

(gh-23357)

NumPy 现在在 np.dtypes 中公开了 DType 类

新的 numpy.dtypes 模块现在公开了 DType 类,并将包含未来与 dtype 相关的功能。大多数用户不需要直接使用这些类。

(gh-23358)

在 .npy 或 .npz 文件中保存之前删除 dtype 元数据

目前,包含具有元数据的 dtype 的表的 *.npy 文件无法读取。现在,np.save 和 np.savez 在保存之前会删除元数据。

(gh-23371)

numpy.lib.recfunctions.structured_to_unstructured 在更多情况下返回视图

structured_to_unstructured 现在返回一个视图,如果字段之间的步幅是恒定的。之前,字段之间的填充或反转字段会导致复制。此更改仅适用于 ndarray、memmap 和 recarray。对于所有其他数组子类,行为保持不变。

(gh-23652)

有符号和无符号整数始终正确比较

当在 NumPy 中混合使用 uint64 和 int64 时,NumPy 通常会将两者都提升为 float64。这种行为可能会引起争议,但对于比较 ==、<= 来说是令人困惑的,因为返回的结果可能是不正确的,但转换是隐藏的,因为结果是布尔值。现在 NumPy 将通过避免转换为浮点数来返回这些正确的结果。

(gh-23713)

性能改进和变化

在启用 AVX-512 的处理器上更快的 np.argsort

32 位和 64 位快速排序算法对 np.argsort 可以在支持 AVX-512 指令集的处理器上提高多达 6 倍的速度。

感谢 英特尔公司 赞助此工作。

(gh-23707)

在启用 AVX-512 的处理器上更快的 np.sort

16 位和 64 位数据类型的快速排序在支持 AVX-512 指令集的处理器上提高了多达 15 倍和 9 倍的速度。

感谢 英特尔公司 赞助此工作。

(gh-22315)

__array_function__ 机制现在更快

NumPy 中大多数函数的开销现在更小,特别是在使用关键字参数时。这一变化显著加快了许多简单函数调用的速度。

(gh-23020)

ufunc.at 可以更快

通用的 ufunc.at 可以提高多达 9 倍的速度。此加速的条件:

操作数已对齐
不进行强制转换

如果在满足上述条件的情况下,对 1 维参数使用适当的索引循环的 ufuncs,ufunc.at 的速度可以提高多达 60 倍(额外提升 7 倍速度)。已经在 add、subtract、multiply、floor_divide、maximum、minimum、fmax 和 fmin 中添加了适当的索引循环。

内部逻辑类似于常规 ufuncs 使用的逻辑,也有快速路径。

感谢 D. E. Shaw 集团 赞助此工作。

(gh-23136)

更快的 NpzFile 成员测试

NpzFile 上的成员测试如果成功将不再解压存档。

(gh-23661)

变化

np.r_[] 和 np.c_[] 与特定标量值

在罕见情况下,主要使用 np.r_ 与标量可能导致不同的结果。主要潜在变化如下所示:

>>> np.r_[np.arange(5, dtype=np.uint8), -1].dtype
int16 # rather than the default integer (int64 or int32)
>>> np.r_[np.arange(5, dtype=np.int8), 255]
array([ 0, 1, 2, 3, 4, 255], dtype=int16)

第二个示例返回:

array([ 0, 1, 2, 3, 4, -1], dtype=int8)

第一个是由于带有无符号整数数组的有符号整数标量,而第二个是由于255无法容纳在int8中,NumPy 目前正在检查值以使其正常工作。(请注意,由于NEP 50; 未来预计第二个示例将发生变化,然后将引发错误。)

(gh-22539)

大多数 NumPy 函数被包装为 C 可调用函数

为加快__array_function__分派速度,大多数 NumPy 函数现在被包装为 C 可调用函数,而不是真正的 Python 函数或 C 方法。它们看起来和以前一样(像一个 Python 函数),这只会提高性能和用户体验(更清晰的回溯)。但是,如果此更改因某种原因使您的程序混淆,请通知 NumPy 开发人员。

(gh-23020)

C++标准库使用

NumPy 构建现在依赖于 C++标准库,因为numpy.core._multiarray_umath扩展与 C++链接器链接。

(gh-23601)

弃用

np.core.MachAr已被弃用。这是私有 API。在np.core中定义的名称通常应被视为私有。
(gh-22638)
np.finfo(None)已被弃用。
(gh-23011)
np.round_已被弃用。请改用np.round。
(gh-23302)
np.product已被弃用。请改用np.prod。
(gh-23314)
np.cumproduct已被弃用。请改用np.cumprod。
(gh-23314)
np.sometrue已被弃用。请改用np.any。
(gh-23314)
np.alltrue已被弃用。请改用np.all。
(gh-23314)
仅将 ndim-0 数组视为标量。NumPy 过去将所有大小为 1 的数组(例如,np.array([3.14]))视为标量。将来,这将限制为 ndim 0 的数组(例如,np.array(3.14))。以下表达式将报告弃用警告:
a = np.array([3.14])
float(a) # better: a[0] to get the numpy.float or a.item()
b = np.array([[3.14]])
c = numpy.random.rand(10)
c[0] = b # better: c[0] = b[0, 0]
(gh-10615)
np.find_common_type 已被弃用。numpy.find_common_type 现在已被弃用,应该用 numpy.result_type 或 numpy.promote_types 替代。大多数用户将 find_common_type 的第二个 scalar_types 参数设为 [],在这种情况下,np.result_type 和 np.promote_types 都更快且更可靠。当不使用 scalar_types 时,主要区别在于替代意图将非本机字节顺序转换为本机字节顺序。此外,find_common_type 返回 object dtype 而不是失败的提升。当输入不全为数字时,这会导致差异。重要的是,对于例如 timedelta/datetime 这样的情况,NumPy 提升规则目前有时会令人惊讶。
当 scalar_types 参数不是 [] 时,情况会更加复杂。在大多数情况下,使用 np.result_type 并传递 Python 值 0、0.0 或 0j 的结果与在 scalar_types 中使用 int、float 或 complex 是相同的。
当构建 scalar_types 时,np.result_type 是正确的替代方案,可以传递标量值如 np.float32(0.0)。传递非 0 的值可能导致值检查行为(np.find_common_type 从未使用过,NEP 50 可能会在未来更改)。在这种情况下,主要可能的行为变化是当数组类型为有符号整数而标量类型为无符号整数时。
如果您不确定如何替换 scalar_types 的使用,或者非数值 dtype 可能存在,请不要犹豫打开一个 NumPy 问题寻求帮助。
(gh-22539)

过期的弃用

np.core.machar 和 np.finfo.machar 已被移除。
(gh-22638)
当 dtype 不是数值时,+arr 现在会引发错误(正数未定义)。
(gh-22998)
现在必须将序列传递给堆叠函数家族(stack、vstack、hstack、dstack 和 column_stack)。
(gh-23019)
np.clip 现在默认使用相同类型转换。在 NumPy 1.17 中,回退到不安全的转换已被弃用。
(gh-23403)
np.clip 现在会传播作为 min 或 max 传递的 np.nan 值。以前,标量 NaN 通常被忽略。在 NumPy 1.17 中已被弃用。
(gh-23403)
np.dual 子模块已被移除。
(gh-23480)
NumPy 现在总是忽略数组类似对象的序列行为(定义数组协议之一)。(从 NumPy 1.20 开始弃用)
(gh-23660)
在 astype 或数组创建函数(如 asarray)中转换为子数组 dtype 时的 FutureWarning 现已最终确定。现在的行为总是与将子数组 dtype 包装成单个字段时相同(这是以前的解决方法)。(自 NumPy 1.20 起为 FutureWarning)
(gh-23666)
== 和 != 警告已最终确定。现在数组上的 == 和 != 运算符总是:

在比较过程中引发错误,例如当数组具有不兼容的形状时(np.array([1, 2]) == np.array([1, 2, 3]))。
当值在本质上不可比较时(例如具有不同的 dtype),返回全部为 True 或全部为 False 的数组。一个例子是 np.array([\”a\”]) == np.array([1])。
这模仿了 Python 的行为,当比较不兼容类型时返回 False 和 True,例如 \”a\” == 1 和 \”a\” != 1。很长一段时间,这些会产生 DeprecationWarning 或 FutureWarning。
(gh-22707)
已移除 Nose 支持。NumPy 在 2018 年转而使用 pytest,而 nose 已经多年未得到维护。我们保留了 NumPy 的 nose 支持,以避免破坏可能仍在使用它而尚未转换为 pytest 或其他测试框架的下游项目。随着 Python 3.12 的到来,未打补丁的 nose 将引发错误。是时候前进了。
已移除的装饰器:

raises
slow
setastest
skipif
knownfailif
deprecated
parametrize
_needs_refcount
这些不应与具有类似名称的 pytest 版本混淆,例如 pytest.mark.slow、pytest.mark.skipif、pytest.mark.parametrize。
已移除的函数:

Tester
import_nose
run_module_suite
(gh-23041)
已移除 numpy.testing.utils 的 shim。自 2019 年以来,从 numpy.testing.utils 的 shim 导入已被弃用,现已移除。所有导入应直接从 numpy.testing 进行。
(gh-23060)
已移除禁用分派的环境变量。已移除对 NUMPY_EXPERIMENTAL_ARRAY_FUNCTION 环境变量的支持。此变量禁用了 __array_function__ 的分派。
(gh-23376)
已移除 y= 作为 out= 的别名的支持。fix、isposinf 和 isneginf 函数允许使用 y= 作为(已弃用的)out= 的别名。这不再受支持。
(gh-23376)

兼容性说明

busday_count 方法现在正确处理 begindates 晚于 enddates 的情况。以前,即使文档规定始终排除 enddates,但 enddates 仍然被包括在内。
(gh-23229)
使用 np.equal 或 np.not_equal 比较日期时间和时间增量时,numpy 以前允许使用 casting=\”unsafe\” 进行比较。现在此操作会失败。通过使用 dtype 关键字参数强制输出数据类型可以使操作成功,但我们不建议这样做。
(gh-22707)
当使用 np.load 从文件句柄加载数据时,如果句柄位于文件末尾,可能会通过多次调用 np.load 读取多个数组,numpy 以前在 allow_pickle=False 时引发 ValueError,在 allow_pickle=True 时引发 OSError。现在无论哪种情况都会引发 EOFError。
(gh-23105)

使用 mode=wrap 的 np.pad 会以原始数据的严格倍数进行填充

基于早期版本的 pad 的代码使用 mode=\”wrap\”,当填充大小大于初始数组时,将返回不同的结果。

使用 mode=wrap 的 np.pad 现在始终以原始数据的严格倍数填充空间,即使填充大小大于初始数组。

(gh-22575)

移除了 Cython 中的 long_t 和 ulong_t

long_t 和 ulong_t 是 longlong_t 和 ulonglong_t 的别名,这容易引起混淆(这是 Python 2 的遗留问题)。这个改变可能导致以下错误:

\’long_t\’ is not a type identifier
\’ulong_t\’ is not a type identifier

我们建议使用诸如 cnp.int64_t 这样的位大小类型,或者使用 cnp.intp_t,在 32 位系统上为 32 位,在 64 位系统上为 64 位(这对索引最兼容)。如果需要 C 的 long,请使用普通的 long 或 npy_long。cnp.int_t 也是 long(NumPy 的默认整数)。但是,在 64 位 Windows 上,long 是 32 位,即使在 NumPy 中我们可能希望调整这一点。(如果您对此感到好奇,请随时联系 NumPy 开发人员。)

(gh-22637)

对于 ufunc 的错误 axes 参数,已更改错误消息和类型

当向 ufunc(…, axes=[…]) 传递错误的 axes 值时,错误消息和类型已更改。现在的消息更具指示性,如果值不匹配,则会引发 AxisError。对于无效的输入类型仍会引发 TypeError。

(gh-22675)

定义了 __array_ufunc__ 的类数组现在可以在作为 where 使用时覆盖 ufuncs。

如果numpy.ufunc的where关键字参数是numpy.ndarray的子类或者是定义了numpy.class.__array_ufunc__的鸭子类型,它可以通过与输入和输出参数相同的机制覆盖ufunc的行为。请注意,为了使其正常工作,where.__array_ufunc__的实现将必须解开where参数以将其传递给ufunc的默认实现,或者在使用super().__array_ufunc__之前将其传递给numpy.ndarray的子类。

(gh-23240)

现在,默认情况下,针对 NumPy C API 进行编译是向后兼容的。

NumPy 现在默认公开一个向后兼容的 C-API 子集。这使得使用oldest-supported-numpy变得不必要。库可以覆盖默认的最小版本以与以下兼容:

#define NPY_TARGET_VERSION NPY_1_22_API_VERSION

在包含 NumPy 之前或通过将等效的-D选项传递给编译器之前。NumPy 1.25 的默认值是NPY_1_19_API_VERSION。因为 NumPy 1.19 C API 与 NumPy 1.16 相同,因此生成的程序将与 NumPy 1.16 兼容(从 C-API 的角度看)。这个默认值将在未来的非 bug 修复版本中增加。您仍然可以针对较旧的 NumPy 版本进行编译,并在更新的版本上运行。

更多细节请参见 For downstream package authors。

(gh-23528)

使用mode=wrap的np.pad使用原始数据的严格倍数填充。

基于早期版本的pad的代码,使用mode=\”wrap\”会在填充大小大于初始数组时返回不同的结果。

现在,np.pad使用mode=wrap时,即使填充大小大于初始数组,也始终使用原始数据的严格倍数填充空间。

(gh-22575)

移除了 Cython 的long_t和ulong_t。

long_t和ulong_t是longlong_t和ulonglong_t的别名,令人困惑(Python 2 的遗留物)。这个更改可能导致错误:

\’long_t\’ is not a type identifier
\’ulong_t\’ is not a type identifier

我们建议使用比特大小类型,如cnp.int64_t或使用在 32 位系统上为 32 位,在 64 位系统上为 64 位的cnp.intp_t(这对索引最兼容)。如果需要 C long,请使用普通的long或npy_long。cnp.int_t也是long(NumPy 的默认整数)。但是,在 64 位 Windows 上,long是 32 位,我们可能会在 NumPy 中进行调整(如果您对此感到好奇,请随时联系 NumPy 开发人员)。

(gh-22637)

更改了ufunc的错误消息和axes参数的类型。

当将错误的axes值传递给ufunc(…, axes=[…])时,错误消息和类型已更改。现在的消息更能指示问题,如果值不匹配,则会引发AxisError。对于无效的输入类型仍会引发TypeError。

(gh-22675)

如果作为where使用的 Array-like 定义了__array_ufunc__,现在可以覆盖 ufunc。

如果numpy.ufunc的where关键字参数是numpy.ndarray的子类或者是定义了numpy.class.__array_ufunc__的鸭子类型,它可以通过与输入和输出参数相同的机制覆盖 ufunc 的行为。请注意,为了使其正常工作,where.__array_ufunc__的实现将必须解开where参数以将其传递给ufunc的默认实现,或者在使用super().__array_ufunc__之前解开numpy.ndarray子类。

(gh-23240)

编译针对 NumPy C API 现在默认向后兼容

NumPy 现在默认公开 C-API 的向后兼容子集。这使得使用oldest-supported-numpy变得不必要。库可以覆盖默认的最小版本以与使用兼容:

#define NPY_TARGET_VERSION NPY_1_22_API_VERSION

在包含 NumPy 之前或通过向编译器传递等效的-D选项之前。NumPy 1.25 的默认值是NPY_1_19_API_VERSION。因为 NumPy 1.19 C API 与 NumPy 1.16 相同,因此生成的程序将与 NumPy 1.16 兼容(从 C-API 的角度看)。这个默认值将在未来的非 bug 修复版本中增加。您仍然可以针对较旧的 NumPy 版本进行编译并在更新的版本上运行。

更多详细信息请参见对于下游包作者。

(gh-23528)

新功能

np.einsum现在接受具有object dtype 的数组

代码路径将在对象 dtype 数组上调用 python 运算符,就像np.dot和np.matmul一样。

(gh-18053)

添加对原地矩阵乘法的支持

现在可以通过@=运算符执行原地矩阵乘法。

>>> import numpy as np
>>> a = np.arange(6).reshape(3, 2)
>>> print(a)
[[0 1]
[2 3]
[4 5]]
>>> b = np.ones((2, 2), dtype=int)
>>> a @= b
>>> print(a)
[[1 1]
[5 5]
[9 9]]

(gh-21120)

添加了NPY_ENABLE_CPU_FEATURES环境变量

用户现在可以通过指定NPY_ENABLE_CPU_FEATURES环境变量在运行时选择仅启用内置 CPU 功能的子集。请注意,这些指定的功能必须在基线之外,因为这些功能总是被假定。如果尝试启用 CPU 不支持的功能,或者 NumPy 未构建的功能,将引发错误。

(gh-22137)

NumPy 现在有一个np.exceptions命名空间

NumPy 现在有一个专用的命名空间,使大多数异常和警告可用。所有这些仍然在主命名空间中可用,尽管一些可能会在未来慢慢移动。这样做的主要原因是增加可发现性并添加未来的异常。

(gh-22644)

np.linalg函数返回 NamedTuples

返回元组的np.linalg函数现在返回 namedtuples。这些函数包括eig()、eigh()、qr()、slogdet()和svd()。在这些函数返回非元组的情况下,返回类型不变,例如带有某些关键字参数的svd(compute_uv=False)。

(gh-22786)

np.char中的字符串函数与 NEP 42 自定义 dtype 兼容

可以将代表 unicode 字符串或字节字符串的自定义 dtype 传递给np.char中的字符串函数。

(gh-22863)

可以从字符串抽象 dtype 类创建字符串 dtype 实例

现在可以创建一个具有大小的字符串 dtype 实例,而不使用 dtype 的字符串名称。例如,type(np.dtype(\’U\’))(8)将创建一个等同于np.dtype(\’U8\’)的 dtype。在编写处理字符串 dtype 类的通用代码时,此功能最为有用。

(gh-22963)

富士通 C/C++编译器现在受支持

添加了对富士通编译器的支持。要使用富士通编译器构建,请运行:

python setup.py build -c fujitsu

现在支持 SSL2

添加了对 SSL2 的支持。SSL2 是一个提供 OpenBLAS 兼容 GEMM 函数的库。要启用 SSL2,需要编辑 site.cfg 并使用富士通编译器构建。参见 site.cfg.example。

(gh-22982)

np.einsum现在接受具有object dtype 的数组

代码路径将在对象 dtype 数组上调用 python 运算符,类似于np.dot和np.matmul。

(gh-18053)

添加对原地矩阵乘法的支持

现在可以通过@=运算符执行原地矩阵乘法。

>>> import numpy as np
>>> a = np.arange(6).reshape(3, 2)
>>> print(a)
[[0 1]
[2 3]
[4 5]]
>>> b = np.ones((2, 2), dtype=int)
>>> a @= b
>>> print(a)
[[1 1]
[5 5]
[9 9]]

(gh-21120)

添加了NPY_ENABLE_CPU_FEATURES环境变量

用户现在可以通过指定NPY_ENABLE_CPU_FEATURES环境变量在运行时仅启用内置 CPU 功能的子集。请注意,这些指定的功能必须在基线之外,因为基线始终被假定。如果尝试启用不受 CPU 支持的功能,或者 NumPy 未构建的功能,则会引发错误。

(gh-22137)

NumPy 现在有一个np.exceptions命名空间

NumPy 现在有一个专用的命名空间,使大多数异常和警告可用。所有这些仍然在主命名空间中可用,尽管一些可能会在将来慢慢移动。这样做的主要原因是增加可发现性并添加未来的异常。

(gh-22644)

np.linalg函数返回命名元组

np.linalg函数现在返回命名元组。这些函数包括eig()、eigh()、qr()、slogdet()和svd()。在这些函数返回非元组的实例中,返回类型在某些关键字参数下保持不变(比如svd(compute_uv=False))。

(gh-22786)

np.char中的字符串函数与 NEP 42 自定义 dtype 兼容

现在可以将表示 Unicode 字符串或字节字符串的自定义 dtype 传递给np.char中的字符串函数。

(gh-22863)

可以从字符串抽象 dtype 类创建字符串 dtype 实例

现在可以创建具有大小的字符串 dtype 实例,而无需使用 dtype 的字符串名称。例如,type(np.dtype(\’U\’))(8)将创建一个等效于np.dtype(\’U8\’)的 dtype。在处理字符串 dtype 类的通用代码时,此功能最有用。

(gh-22963)

现在支持富士通 C/C++编译器

添加了对富士通编译器的支持。要使用富士通编译器构建,请运行:

python setup.py build -c fujitsu

现在支持 SSL2

添加了对 SSL2 的支持。SSL2 是一个提供 OpenBLAS 兼容 GEMM 函数的库。要启用 SSL2,需要编辑 site.cfg 并使用富士通编译器构建。请参阅 site.cfg.example。

(gh-22982)

改进

NDArrayOperatorsMixin指定没有__slots__

NDArrayOperatorsMixin类现在指定不包含__slots__,确保子类现在可以在 Python 中使用此功能。

(gh-23113)

修复复数零的幂

np.power现在为复数返回不同的结果0^{non-zero}。请注意,该值仅在指数的实部大于零时定义。以前,除非虚部严格为零,否则返回 NaN。返回值为0+0j或0-0j。

(gh-18535)

新增 DTypePromotionError

NumPy 现在有一个新的DTypePromotionError,当两个 dtype 无法提升为一个公共 dtype 时使用,例如:

np.result_type(\”M8[s]\”, np.complex128)

引发这个新异常。

(gh-22707)

np.show_config使用来自 Meson 的信息

构建和系统信息现在包含来自 Meson 的信息。np.show_config现在有一个新的可选参数mode,以帮助自定义输出。

(gh-22769)

修复np.ma.diff在带有 prepend/append 参数调用时未保留掩码。

调用np.ma.diff时带有 prepend 和/或 append 参数现在返回一个保留输入掩码的MaskedArray。

以前,返回的MaskedArray没有掩码。

(gh-22776)

修正了 Cython 中 NumPy C-API 的错误处理

许多为在 Cython 中使用而定义的 NumPy C 函数缺乏正确的错误指示符,如except -1或except *。现在已添加。

(gh-22997)

能够直接生成随机数生成器

numpy.random.Generator.spawn现在允许通过numpy.random.SeedSequence.spawn机制直接生成新的独立子生成器。numpy.random.BitGenerator.spawn对底层比特生成器执行相同操作。

另外,numpy.random.BitGenerator.seed_seq现在直接提供用于初始化比特生成器的种子序列的访问。这允许例如:

seed = 0x2e09b90939db40c400f8f22dae617151
rng = np.random.default_rng(seed)
child_rng1, child_rng2 = rng.spawn(2)
# safely use rng, child_rng1, and child_rng2

以前,这是很难做到的,没有明确传递SeedSequence。请参阅numpy.random.SeedSequence获取更多信息。

(gh-23195)

numpy.logspace现在支持非标量base参数

numpy.logspace的base参数现在可以是类似数组,如果可以与start��stop参数进行广播。

(gh-23275)

np.ma.dot()现在支持非 2d 数组

以前np.ma.dot()只在a和b都是 2d 时有效。现在它也适用于非 2d 数组,就像np.dot()一样。

(gh-23322)

明确在 repr 中显示.npz 文件的键

打印NpzFile时显示加载的.npz 文件的键。

>>> npzfile = np.load(\’arr.npz\’)
>>> npzfile
NpzFile \’arr.npz\’ with keys arr_0, arr_1, arr_2, arr_3, arr_4…

(gh-23357)

NumPy 现在在np.dtypes中公开了 DType 类

新的numpy.dtypes模块现在公开了 DType 类,并将包含未来与 dtype 相关的功能。大多数用户不需要直接使用这些类。

(gh-23358)

在保存为.npy或.npz文件之前,删除 dtype 元数据

目前,包含具有元数据的 dtype 表的*.npy文件无法读取。现在,在保存之前,np.save和np.savez会删除元数据。

(gh-23371)

numpy.lib.recfunctions.structured_to_unstructured在更多情况下返回视图

structured_to_unstructured现在返回一个视图,如果字段之间的步幅是恒定的。以前,字段之间的填充或反转字段会导致复制。此更改仅适用于ndarray、memmap和recarray。对于所有其他数组子类,行为保持不变。

(gh-23652)

有符号和无符号整数始终正确比较

当在 NumPy 中混合使用uint64和int64时,NumPy 通常将两者都提升为float64。这种行为可能会引起争议,但对于比较==、<=来说很令人困惑,因为返回的结果可能是不正确的,但转换被隐藏,因为结果是布尔值。现在,NumPy 将避免转换为浮点数,以便为这些情况返回正确的结果。

(gh-23713)

NDArrayOperatorsMixin指定它没有__slots__

NDArrayOperatorsMixin类现在指定它不包含__slots__,确保子类现在可以在 Python 中使用此功能。

(gh-23113)

修复复零的幂

np.power现在对于复数的0^{non-zero}返回不同的结果。请注意,只有当指数的实部大于零时,该值才被定义。以前,除非虚部严格为零,否则返回 NaN。返回值为0+0j或0-0j。

(gh-18535)

新的DTypePromotionError

NumPy 现在有一个新的DTypePromotionError,当两个 dtype 无法提升为一个公共 dtype 时使用,例如:

np.result_type(\”M8[s]\”, np.complex128)

引发这���新异常。

(gh-22707)

np.show_config使用来自 Meson 的信息

构建和系统信息现在包含来自 Meson 的信息。np.show_config现在有一个新的可选参数mode,以帮助自定义输出。

(gh-22769)

修复np.ma.diff在调用时不保留掩码的问题,当使用参数 prepend/append 时。

使用参数 prepend 和/或 append 调用np.ma.diff现在返回一个保留输入掩码的MaskedArray。

以前,返回没有掩码的MaskedArray。

(gh-22776)

修正了 Cython 中 NumPy C-API 的错误处理

许多为在 Cython 中使用而定义的 NumPy C 函数缺乏正确的错误指示符,如 except -1 或 except *。现在已经添加了这些。

(gh-22997)

直接生成随机数生成器的能力

numpy.random.Generator.spawn 现在允许通过 numpy.random.SeedSequence.spawn 机制直接生成新的独立子生成器。numpy.random.BitGenerator.spawn 对底层位生成器执行相同操作。

此外,numpy.random.BitGenerator.seed_seq 现在直接提供用于初始化位生成器的种子序列的访问权限。例如,这允许:

seed = 0x2e09b90939db40c400f8f22dae617151
rng = np.random.default_rng(seed)
child_rng1, child_rng2 = rng.spawn(2)
# safely use rng, child_rng1, and child_rng2

以前,这是很难做到的,没有显式传递 SeedSequence。请参阅 numpy.random.SeedSequence 了解更多信息。

(gh-23195)

numpy.logspace 现在支持非标量 base 参数

numpy.logspace 的 base 参数现在可以是类似数组,如果它可以与 start 和 stop 参数进行广播。

(gh-23275)

np.ma.dot() 现在支持非 2d 数组

以前,np.ma.dot() 只能在 a 和 b 都是 2d 的情况下工作。现在它也适用于非 2d 数组,就像 np.dot() 一样。

(gh-23322)

显式显示 .npz 文件的键��� repr 中

NpzFile 在打印时显示加载的 .npz 文件的键。

>>> npzfile = np.load(\’arr.npz\’)
>>> npzfile
NpzFile \’arr.npz\’ with keys arr_0, arr_1, arr_2, arr_3, arr_4…

(gh-23357)

NumPy 现在在 np.dtypes 中公开了 DType 类。

新的 numpy.dtypes 模块现在公开了 DType 类,并将包含未来与 dtype 相关的功能。大多数用户不需要直接使用这些类。

(gh-23358)

在保存为 .npy 或 .npz 文件之前删除 dtype 元数据

目前,包含具有元数据的 dtype 的表的 *.npy 文件无法读取。现在,np.save 和 np.savez 在保存之前删除元数据。

(gh-23371)

numpy.lib.recfunctions.structured_to_unstructured 在更多情况下返回视图

structured_to_unstructured现在如果字段之间的步幅是恒定的,则返回一个视图。以前,字段之间的填充或反转字段会导致复制。此更改仅适用于ndarray、memmap和recarray。对于所有其他数组子类,行为保持不变。

(gh-23652)

有符号和无符号整数始终正确比较

当 NumPy 中混合使用uint64和int64时,NumPy 通常会将两者都提升为float64。这种行为可能会引起争议,但对于比较==、<=来说很令人困惑,因为返回的结果可能是不正确的,但转换是隐藏的,因为结果是布尔值。现在 NumPy 将通过避免转换为浮点数来返回这些正确的结果。

(gh-23713)

性能改进和变化

在 AVX-512 启用处理器上更快的np.argsort

32 位和 64 位快速排序算法对支持 AVX-512 指令集的处理器获得高���6 倍的加速。

感谢英特尔公司赞助此工作。

(gh-23707)

在 AVX-512 启用处理器上更快的np.sort

16 位和 64 位数据类型的快速排序获得高达 15 倍和 9 倍的加速,对支持 AVX-512 指令集的处理器。

感谢英特尔公司赞助此工作。

(gh-22315)

__array_function__机制现在更快

现在 NumPy 中大多数函数的开销更小,特别是在使用关键字参数时。这个改变显著加快了许多简单函数调用的速度。

(gh-23020)

ufunc.at可以更快

通用ufunc.at可以快达到 9 倍。加速的条件:

操作数对齐
无强制转换

如果 ufunc 在具有上述条件的 1d 参数上具有适当的索引循环,ufunc.at可以快达到 60 倍(额外 7 倍加速)。已将适当的索引循环添加到add、subtract、multiply、floor_divide、maximum、minimum、fmax和fmin中。

内部逻辑类似于常规 ufunc 使用的逻辑,也有快速路径。

感谢D. E. Shaw 集团赞助此工作。

(gh-23136)

在NpzFile上更快的成员测试

在NpzFile上的成员测试如果成功将不再解压存档。

(gh-23661)

在 AVX-512 启用处理器上更快的np.argsort

32 位和 64 位快速排序算法对支持 AVX-512 指令集的处理器获得高达 6 倍的加速。

感谢英特尔公司赞助此工作。

(gh-23707)

AVX-512 启用处理器上更快的np.sort

16 位和 64 位数据类型的快速排序在支持 AVX-512 指令集的处理器上提高了 15 倍和 9 倍的速度。

感谢英特尔公司赞助此工作。

(gh-22315)

__array_function__机制现在更快

现在 NumPy 中大多数函数的开销更小,特别是在使用关键字参数时。这一变化显著加快了许多简单函数调用的速度。

(gh-23020)

ufunc.at可以更快

通用ufunc.at可以快 9 倍。此加速的条件:

操作数已对齐
无需转换

如果在满足上述条件的 1d 参数上具有适当索引循环的 ufunc,ufunc.at可以快 60 倍(额外提速 7 倍)。已将适当的索引循环添加到add、subtract、multiply、floor_divide、maximum、minimum、fmax和fmin。

内部逻辑类似于常规 ufunc 使用的逻辑,也有快速路径。

感谢D. E. Shaw 集团赞助此工作。

(gh-23136)

在NpzFile上更快的成员测试

在NpzFile上的成员测试如果成功将不再解压存档。

(gh-23661)

变更

np.r_[]和np.c_[]与特定标量值

在罕见情况下,主要使用np.r_与标量可能导致不同的结果。主要潜在变化如下所示:

>>> np.r_[np.arange(5, dtype=np.uint8), -1].dtype
int16 # rather than the default integer (int64 or int32)
>>> np.r_[np.arange(5, dtype=np.int8), 255]
array([ 0, 1, 2, 3, 4, 255], dtype=int16)

第二个示例返回:

array([ 0, 1, 2, 3, 4, -1], dtype=int8)

第一个是由于带有无符号整数数组的有符号整数标量,而第二个是由于255无法容纳在int8中,NumPy 目前正在检查值以使其正常工作。(请注意,由于NEP 50; 未来预计第二个示例将发生变化,然后会引发错误。)

(gh-22539)

大多数 NumPy 函数都被封装为可调用的 C 函数

为加快__array_function__分派,现在大多数 NumPy 函数都被封装为 C 可调用函数,而不是正确的 Python 函数或 C 方法。它们看起来和感觉仍然与以前一样(像 Python 函数),这只会提高性能和用户体验(更清晰的回溯)。但是,如果此更改因某种原因使您的程序混淆,请通知 NumPy 开发人员。

(gh-23020)

C++标准库使用

现在 NumPy 构建依赖于 C++标准库,因为numpy.core._multiarray_umath扩展与 C++链接器链接。

(gh-23601)

np.r_[]和np.c_[]与特定标量值

在罕见情况下,主要使用np.r_与标量可能导致不同的结果。主要潜在变化如下所示:

>>> np.r_[np.arange(5, dtype=np.uint8), -1].dtype
int16 # rather than the default integer (int64 or int32)
>>> np.r_[np.arange(5, dtype=np.int8), 255]
array([ 0, 1, 2, 3, 4, 255], dtype=int16)

第二个示例返回:

array([ 0, 1, 2, 3, 4, -1], dtype=int8)

第一个是由于带有无符号整数数组的有符号整数标量,而第二个是由于 255 无法容纳在 int8 中,而 NumPy 目前正在检查值以使其工作。(请注意,由于 NEP 50, 第二个示例预计将来会发生变化;然后会引发错误。)

(gh-22539)

大多数 NumPy 函数都被包装成可调用的 C 函数

为了加快 __array_function__ 的分发,大多数 NumPy 函数现在被包装成 C 可调用函数,而不是正确的 Python 函数或 C 方法。它们看起来和感觉仍然与以前一样(像一个 Python 函数),这只会提高性能和用户体验(更清晰的回溯)。然而,如果这种变化因某种原因使您的程序混淆,请通知 NumPy 开发人员。

(gh-23020)

C++ 标准库的使用

现在 NumPy 构建依赖于 C++ 标准库,因为 numpy.core._multiarray_umath 扩展与 C++ 链接器链接。

(gh-23601)

#以上关于NumPy 1.26 中文文档(五十四)的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92619.html

(0)
CSDN的头像CSDN
上一篇 2024年6月27日
下一篇 2024年6月27日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注