NumPy 1.26 中文文档(五十四)

2024-07-26 09:55:46 浏览数 (1)

原文: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、Stéfan van der Walt 和 Matti Picus 在主要开发分支中做了大部分工作。

本版本的亮点包括:

  • 支持 Python 3.12.0。
  • Cython 3.0.0 兼容性。
  • 使用 Meson 构建系统
  • 更新的 SIMD 支持
  • f2py 修复,meson 和 bind(x)支持
  • 支持更新的 Accelerate BLAS/LAPACK 库

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

新功能

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

(gh-23789)

支持更新的 Accelerate BLAS/LAPACK 库

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

(gh-24053)

f2pymeson后端

编译模式下的f2py(即f2py -c)现在接受--backend meson选项。这是 Python 3.12及以后版本的默认选项。旧版本仍将默认使用--backend distutils

为了在实际用例中支持这一点,在编译模式下,f2py接受一个--dep标志,可以多次使用,这将映射到meson后端中的dependency()调用,并且在distutils后端中不起作用。

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

(gh-24532)

f2py添加了bind(c)支持

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

注意: bind(c, name = 'routine_name_other_than_fortran_routine') 不会被 f2py 绑定所遵守,因为 bind(c)name 旨在保证 CFortran 中的相同名称,而不是在 PythonFortran 中。

(gh-24555)

改进

f2pyiso_c_binding 的支持

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

(gh-24555)

构建系统更改

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

  • 常规安装:pip install numpy 或(在克隆的仓库中)pip install .
  • 构建轮子:python -m build(首选),或 pip wheel .
  • 可编辑安装:pip install -e . --no-build-isolation
  • 通过使用 spin 实现的自定义 CLI 进行开发构建:spin build

所有常规的 pippypa/build 标志(例如,--no-build-isolation)应该按预期工作。

NumPy 特定的构建自定义

许多 NumPy 特定的构建自定义方式已经改变。不再支持控制 BLAS/LAPACK、SIMD、线程等选项的 NPY_* 环境变量,也不再支持用于选择 BLAS 和 LAPACK 的 site.cfg 文件。相反,可以通过 pip/build 的配置设置接口传递命令行标志给构建。这些标志都列在仓库根目录的 meson_options.txt 文件中。在最终 1.26.0 版本发布之前将提供详细文档;目前请参阅 SciPy“从源代码构建”文档,因为大多数构建自定义方式在 SciPy 中的工作方式与 NumPy 中几乎相同。

构建依赖

虽然 NumPy 的运行时依赖关系没有改变,但构建依赖关系已经改变。由于我们暂时提供 Meson 和 meson-python,因此有几个新的依赖项 - 请查看 pyproject.toml[build-system] 部分以获取详细信息。

故障排除

这次构建系统的更改相当大。在出现意外问题的情况下,仍然可以使用基于 setup.py 的构建作为临时解决方案(在 Python 3.9-3.11 上,而不是 3.12),方法是将 pyproject.toml.setuppy 复制到 pyproject.toml。但是,请在 NumPy 问题跟踪器上提出详细问题。我们的目标是尽快淘汰 setup.py 构建,因此希望在 1.26.0 发布周期的早期阶段发现所有潜在的阻碍因素。

贡献者

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

  • @DWesl
  • Albert Steppi
  • Bas van Beek
  • Charles Harris
  • Developer-Ecosystem-Engineering
  • Filipe Laíns
  • Jake Vanderplas
  • Liang Yan
  • Marten van Kerkwijk
  • Matti Picus
  • Melissa Weber Mendonça
  • Namami Shanker
  • Nathan Goldbaum
  • Ralf Gommers
  • Rohit Goswami
  • Sayed Adel
  • Sebastian Berg
  • Stefan van der Walt
  • Tyler Reddy
  • Warren Weckesser

合并的拉取请求

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

  • #24305: 维护:为 1.26.x 分支准备开发
  • #24308: 维护:从主分支大规模更新文件以用于 numpy 1.26
  • #24322: CI:修复 1.26.x 分支上的 wheel 构建
  • #24326: 构建:更新 openblas 到更新版本
  • #24327: 类型:简化_NestedSequence.__getitem__签名
  • #24328: 错误:修复 choose 引用计数泄漏
  • #24337: 测试:修复在没有 BLAS/LAPACK 的构建中运行测试套件的问题
  • #24338: 错误:修复 dirichlet 生成 nan 的问题。
  • #24340: 维护:从主分支进行 Dependabot 更新
  • #24342: 维护:重新添加 NPY_RUN_MYPY_IN_TESTSUITE=1
  • #24353: 维护:从主分支更新extbuild.py
  • #24356: 测试:修复最近 setuptools 中的弃用问题的 distutils 测试…
  • #24375: 维护:更新 cibuildwheel 到版本 2.15.0
  • #24381: 维护:修复 codespaces setup.sh 脚本
  • #24403: 增强:为多目标构建支持供应商 meson
  • #24404: 构建:供应商 meson-python 以使 Windows 构建支持 SIMD…
  • #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: 错误:由于未更改的 inplace 自动生成…修复 meson 构建失败
  • #24521: 错误:修复 git-version 脚本的问题,需要一个 shebang 才能运行
  • #24522: BUG: 为 git_hash 使用默认赋值 [跳过 ci]
  • #24524: BUG: 修复 choose 中的 NPY_cast_info 错误处理
  • #24526: BUG: 修复 f2py 中的常用块处理
  • #24541: CI,TYP: 将 mypy 升级至 1.4.1
  • #24542: BUG: 修复假定长度 f2py 回归
  • #24544: MAINT: 统一 fortranobject
  • #24545: TYP: 向 numpy.isin 类型规范添加 kind 参数
  • #24561: BUG: 修复掩码和未掩码结构化数组之间的比较
  • #24590: CI: 在 Cygwin 上排除导入库列表中的 DLLs。
  • #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: 明确声明dtypegeneric可哈希
  • #24637: ENH: 使用typing.assert_type重构类型“reveal”测试
  • #24638: MAINT: 将 actions/checkout 从 3.6.0 升级至 4.0.0
  • #24647: ENH: f2pymeson后端
  • #24648: MAINT: 重构 Clang 的部分加载解决方法
  • #24653: REL: 为 NumPy 1.26.0rc1 版本做准备。
  • #24659: BLD: 允许指定长双精度格式以避免运行时…
  • #24665: BLD: 修复 random.mtrand 扩展中的错误,不链接 libnpyrandom
  • #24675: 构建:为 Windows 上的 32 位 Python 使用 MSVC 构建 wheels
  • #24700: 构建:修复交叉编译过程中的编译器选择问题
  • #24701: 错误:修复 f2py 中复杂值的数据语句处理
  • #24707: 类型:为 py3.12 缓冲区协议添加注释
  • #24718: 文档:修复 1.26.x 上的一些文档构建问题并更新 spin 文档

新功能

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

(gh-23789)

支持更新的 Accelerate BLAS/LAPACK 库

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

(gh-24053)

f2pymeson ��端

f2py 在编译模式下(即 f2py -c)现在接受 --backend meson 选项。这是 Python 3.12 及以后版本的默认选项。旧版本仍将默认使用 --backend distutils

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

对于仅作为代码生成器使用 f2py 的用户,没有任何更改,即没有 -c

(gh-24532)

f2pybind(c) 支持

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

注意: bind(c, name = 'routine_name_other_than_fortran_routine') 是有意设计不被 f2py 绑定所接受的,因为 bind(c)name 旨在仅保证 CFortran 中的相同名称,而不是 PythonFortran 中的相同名称。

(gh-24555)

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

(gh-23789)

支持更新的 Accelerate BLAS/LAPACK 库

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

(gh-24053)

f2pymeson后端

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

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

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

(gh-24532)

f2pybind(c)支持

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

注意: bind(c, name = 'routine_name_other_than_fortran_routine')是设计上不被f2py绑定所接受的,因为bind(c)name旨在仅保证CFortran中的相同名称,而不是PythonFortran中的相同名称。

(gh-24555)

改进

f2pyiso_c_binding支持

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

(gh-24555)

f2pyiso_c_binding支持

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

(gh-24555)

构建系统更改

在此版本中,NumPy 已切换到 Meson 作为构建系统,meson-python 作为构建后端。安装 NumPy 或构建轮可以使用标准工具如pippypa/build。以下是支持的:

  • 常规安装:pip install numpy或(在克隆的存储库中)pip install .
  • 构建轮:python -m build(首选),或pip wheel .
  • 可编辑安装:pip install -e . --no-build-isolation
  • 通过使用spin实现的自定义 CLI 进行开发构建:spin build

所有常规的pippypa/build标志(例如,--no-build-isolation)应按预期工作。

NumPy 特定的构建定制

许多定制 NumPy 构建的特定方式已经发生了变化。不再支持控制 BLAS/LAPACK、SIMD、线程和其他选项的NPY_*环境变量,也不再支持用于选择 BLAS 和 LAPACK 的site.cfg文件。相反,可以通过pip/build的配置设置界面传递给构建的命令行标志。这些标志都列在存储库根目录中的meson_options.txt文件中。详细文档将在最终 1.26.0 版本发布之前提供;目前请参阅SciPy“从源代码构建”文档,因为大多数构建定制方式在 SciPy 中的工作方式与在 NumPy 中的工作方式几乎相同。

构建依赖

虽然 NumPy 的运行时依赖关系没有改变,但构建依赖关系已经改变。由于我们暂时提供 Meson 和 meson-python,因此��几个新的依赖项 - 请查看pyproject.toml[build-system]部分以获取详细信息。

故障排除

这种构建系统的变化相当大。在出现意外问题的情况下,仍然可以使用基于setup.py的构建作为临时解决方法(在 Python 3.9-3.11 上,而不是 3.12),方法是将pyproject.toml.setuppy复制到pyproject.toml。但是,请在 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“从源代码构建”文档,因为大多数构建定制方式在 SciPy 中的工作方式与在 NumPy 中的工作方式几乎相同。

构建依赖

虽然 NumPy 的运行时依赖关系没有改变,但构建依赖关系已经改变。由于我们暂时提供 Meson 和 meson-python,因此有几个新的依赖项 - 请查看pyproject.toml[build-system]部分以获取详细信息。

故障排除

这种构建系统的变化相当大。在出现意外问题的情况下,仍然可以使用基于setup.py的构建作为临时解决方法(在 Python 3.9-3.11 上,而不是 3.12),方法是将pyproject.toml.setuppy复制到pyproject.toml。但是,请在 NumPy 问题跟踪器上提供有关问题的详细信息。我们的目标是尽快淘汰setup.py构建,因此希望在 1.26.0 版本发布周期的早期阶段就看到所有潜在的阻碍因素。

贡献者

本次发布共有 20 位贡献者。名字后面带有“ ”的人第一次贡献了补丁。

  • @DWesl
  • Albert Steppi
  • Bas van Beek
  • Charles Harris
  • Developer-Ecosystem-Engineering
  • Filipe Laíns
  • Jake Vanderplas
  • Liang Yan
  • Marten van Kerkwijk
  • Matti Picus
  • Melissa Weber Mendonça
  • Namami Shanker
  • Nathan Goldbaum
  • Ralf Gommers
  • Rohit Goswami
  • Sayed Adel
  • Sebastian Berg
  • Stefan van der Walt
  • Tyler Reddy
  • Warren Weckesser

合并的拉取请求

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

  • #24305: 维护:为 1.26.x 分支做开发准备
  • #24308: 维护:从主要大规模更新文件以用于 numpy 1.26
  • #24322: CI:修复 1.26.x 分支上的 wheel 构建
  • #24326: 构建:更新 openblas 到更新版本
  • #24327: 类型:简化 _NestedSequence.__getitem__ 签名
  • #24328: 错误修复:修复 choose 引用计数泄漏
  • #24337: 测试:修复在没有 BLAS/LAPACK 的构建中运行测试套件
  • #24338: 错误修复:随机:修复 dirichlet 生成 nan 的问题。
  • #24340: 维护:从主要 Dependabot 更新
  • #24342: 维护:重新添加 NPY_RUN_MYPY_IN_TESTSUITE=1
  • #24353: 维护:从主要更新 extbuild.py
  • #24356: 测试:修复 distutils 测试以适应最近 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: 明确声明dtypegeneric可哈希
  • #24637: ENH: 使用typing.assert_type重构类型“reveal”测试
  • #24638: MAINT: 将 actions/checkout 从 3.6.0 升级到 4.0.0
  • #24647: ENH: f2pymeson后端
  • #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 NULLgoto 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 NULLgoto 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))。以下表达式将报告弃用警告:

代码语言:javascript复制
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_typenumpy.promote_types替换。大多数用户将find_common_type的第二个scalar_types参数保留为[],在这种情况下,np.result_typenp.promote_types都更快且更可靠。当不使用scalar_types时,主要区别在于替代故意将非本机字节顺序转换为本机字节顺序。此外,find_common_type返回object dtype 而不是失败的提升。当输入不全为数值时,这会导致差异。重要的是,对于例如时间间隔/日期时间这样的情况,NumPy 提升规则目前有时会令人惊讶。

scalar_types参数不是[]时,情况会变得更加复杂。在大多数情况下,使用np.result_type并传递 Python 值00.00j的结果与在scalar_types中使用intfloatcomplex相同。

当构建scalar_types时,np.result_type是正确的替代方案,可以传递标量值如np.float32(0.0)。传递除 0 以外的值可能会导致值检查行为(np.find_common_type从未使用过,NEP 50 将来可能会更改)。在这种情况下,主要的行为变化可能是当数组类型为有符号整数而标量类型为无符号整数时。

如果您不确定如何替换对scalar_types的使用,或者可能存在非数值 dtype,请不要犹豫打开一个 NumPy 问题寻求帮助。

(gh-22539)

已过时的弃用行为

  • np.core.macharnp.finfo.machar已被移除。 (gh-22638)
  • 当 dtype 不是数值时, arr现在会引发错误(正数未定义)。 (gh-22998)
  • 现在必须将序列传递给堆叠函数家族(stackvstackhstackdstackcolumn_stack)。 (gh-23019)
  • np.clip现在默认使用相同类型转换。在 NumPy 1.17 中,回退到不安全的转换已被弃用。 (gh-23403)
  • np.clip现在会传播作为minmax传递的np.nan值。以前,标量 NaN 通常被忽略。这在 NumPy 1.17 中已被弃用。 (gh-23403)
  • np.dual子模块已被移除。 (gh-23480)
  • NumPy 现在总是忽略数组类似对象的序列行为(定义了数组协议之一)。(从 NumPy 1.20 开始弃用) (gh-23660)
  • astypeasarray等数组创建函数中,当转换为子数组 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 在比较不兼容类型时返回FalseTrue的行为,例如"a" == 1"a" != 1。 很长一段时间以来,这些都会产生DeprecationWarningFutureWarning

    (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=的别名的支持。 fixisposinfisneginf函数允许使用y=作为out=的(已弃用的)别名。 这不再受支持。 (gh-23376)

兼容性说明

  • busday_count方法现在正确处理begindates晚于enddates的情况。 以前,即使文档规定始日期始终不包括在内,enddates也会被包括在内。 (gh-23229)
  • 当使用np.equalnp.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=wrapnp.pad用原始数据的严格倍数填充

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

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

(gh-22575)

移除了 Cython 中的long_tulong_t

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

代码语言:javascript复制
'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,请使用普通的longnpy_longcnp.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.ufuncwhere关键字参数是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选项来覆盖默认的最小版本,以便与使用:

代码语言:javascript复制
#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.dotnp.matmul一样。

(gh-18053)

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

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

代码语言:javascript复制
>>> 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 0j0-0j

(gh-18535)

新的 DTypePromotionError

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

代码语言:javascript复制
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 -1except *。现在已经添加了这些。

(gh-22997)

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

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

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

代码语言:javascript复制
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.logspacebase 参数现在可以是类似数组的,如果可以与 startstop 参数进行广播。

(gh-23275)

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

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

(gh-23322)

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

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

代码语言:javascript复制
>>> 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.savenp.savez 在保存之前会删除元数据。

(gh-23371)

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

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

(gh-23652)

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

当在 NumPy 中混合使用 uint64int64 时,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 倍速度)。已经在 addsubtractmultiplyfloor_dividemaximumminimumfmaxfmin 中添加了适当的索引循环。

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

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

(gh-23136)

更快的 NpzFile 成员测试

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

(gh-23661)

变化

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

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

代码语言:javascript复制
>>> 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) 

第二个示例返回:

代码语言:javascript复制
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))。以下表达式将报告弃用警告:

代码语言:javascript复制
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_typenumpy.promote_types 替代。大多数用户将 find_common_type 的第二个 scalar_types 参数设为 [],在这种情况下,np.result_typenp.promote_types 都更快且更可靠。当不使用 scalar_types 时,主要区别在于替代意图将非本机字节顺序转换为本机字节顺序。此外,find_common_type 返回 object dtype 而不是失败的提升。当输入不全为数字时,这会导致差异。重要的是,对于例如 timedelta/datetime 这样的情况,NumPy 提升规则目前有时会令人惊讶。

scalar_types 参数不是 [] 时,情况会更加复杂。在大多数情况下,使用 np.result_type 并传递 Python 值 00.00j 的结果与在 scalar_types 中使用 intfloatcomplex 是相同的。

当构建 scalar_types 时,np.result_type 是正确的替代方案,可以传递标量值如 np.float32(0.0)。传递非 0 的值可能导致值检查行为(np.find_common_type 从未使用过,NEP 50 可能会在未来更改)。在这种情况下,主要可能的行为变化是当数组类型为有符号整数而标量类型为无符号整数时。

如果您不确定如何替换 scalar_types 的使用,或者非数值 dtype 可能存在,请不要犹豫打开一个 NumPy 问题寻求帮助。

(gh-22539)

过期的弃用

  • np.core.macharnp.finfo.machar 已被移除。 (gh-22638)
  • 当 dtype 不是数值时, arr 现在会引发错误(正数未定义)。 (gh-22998)
  • 现在必须将序列传递给堆叠函数家族(stackvstackhstackdstackcolumn_stack)。 (gh-23019)
  • np.clip 现在默认使用相同类型转换。在 NumPy 1.17 中,回退到不安全的转换已被弃用。 (gh-23403)
  • np.clip 现在会传播作为 minmax 传递的 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 的行为,当比较不兼容类型时返回 FalseTrue,例如 "a" == 1"a" != 1。很长一段时间,这些会产生 DeprecationWarningFutureWarning

    (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= 的别名的支持。fixisposinfisneginf 函数允许使用 y= 作为(已弃用的)out= 的别名。这不再受支持。 (gh-23376)

兼容性说明

  • busday_count 方法现在正确处理 begindates 晚于 enddates 的情况。以前,即使文档规定始终排除 enddates,但 enddates 仍然被包括在内。 (gh-23229)
  • 使用 np.equalnp.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=wrapnp.pad 会以原始数据的严格倍数进行填充

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

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

(gh-22575)

移除了 Cython 中的 long_tulong_t

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

代码语言:javascript复制
'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,请使用普通的 longnpy_longcnp.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.ufuncwhere关键字参数是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变得不必要。库可以覆盖默认的最小版本以与以下兼容:

代码语言:javascript复制
#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=wrapnp.pad使用原始数据的严格倍数填充。

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

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

(gh-22575)

移除了 Cython 的long_tulong_t

long_tulong_tlonglong_tulonglong_t的别名,令人困惑(Python 2 的遗留物)。这个更改可能导致错误:

代码语言:javascript复制
'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,请使用普通的longnpy_longcnp.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.ufuncwhere关键字参数是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变得不必要。库可以覆盖默认的最小版本以与使用兼容:

代码语言:javascript复制
#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.dotnp.matmul一样。

(gh-18053)

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

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

代码语言:javascript复制
>>> 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.dotnp.matmul

(gh-18053)

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

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

代码语言:javascript复制
>>> 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 0j0-0j

(gh-18535)

新增 DTypePromotionError

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

代码语言:javascript复制
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 -1except *。现在已添加。

(gh-22997)

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

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

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

代码语言:javascript复制
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.logspacebase参数现在可以是类似数组,如果可以与start��stop参数进行广播。

(gh-23275)

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

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

(gh-23322)

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

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

代码语言:javascript复制
>>> 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.savenp.savez会删除元数据。

(gh-23371)

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

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

(gh-23652)

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

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

(gh-23713)

NDArrayOperatorsMixin指定它没有__slots__

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

(gh-23113)

修复复零的幂

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

(gh-18535)

新的DTypePromotionError

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

代码语言:javascript复制
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 -1except *。现在已经添加了这些。

(gh-22997)

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

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

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

代码语言:javascript复制
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.logspacebase 参数现在可以是类似数组,如果它可以与 startstop 参数进行广播。

(gh-23275)

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

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

(gh-23322)

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

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

代码语言:javascript复制
>>> 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.savenp.savez 在保存之前删除元数据。

(gh-23371)

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

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

(gh-23652)

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

当 NumPy 中混合使用uint64int64时,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 倍加速)。已将适当的索引循环添加到addsubtractmultiplyfloor_dividemaximumminimumfmaxfmin中。

内部逻辑类似于常规 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 倍)。已将适当的索引循环添加到addsubtractmultiplyfloor_dividemaximumminimumfmaxfmin

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

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

(gh-23136)

NpzFile上更快的成员测试

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

(gh-23661)

变更

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

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

代码语言:javascript复制
>>> 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) 

第二个示例返回:

代码语言:javascript复制
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_与标量可能导致不同的结果。主要潜在变化如下所示:

代码语言:javascript复制
>>> 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) 

第二个示例返回:

代码语言:javascript复制
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)

0 人点赞