原文:
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)
f2py
的meson
后端
编译模式下的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
旨在保证 C
和 Fortran
中的相同名称,而不是在 Python
和 Fortran
中。
(gh-24555)
改进
f2py
对 iso_c_binding
的支持
以前,用户必须定义自己的自定义 f2cmap
文件才能使用 Fortran2003 的 iso_c_binding
内在模块定义的类型映射。现在,这些类型映射已经被 f2py
原生支持。
(gh-24555)
构建系统更改
在此版本中,NumPy 已经切换到 Meson 作为构建系统,meson-python 作为构建后端。安装 NumPy 或构建轮子可以使用标准工具如 pip
和 pypa/build
。支持以下内容:
- 常规安装:
pip install numpy
或(在克隆的仓库中)pip install .
- 构建轮子:
python -m build
(首选),或pip wheel .
- 可编辑安装:
pip install -e . --no-build-isolation
- 通过使用 spin 实现的自定义 CLI 进行开发构建:
spin build
。
所有常规的 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“从源代码构建”文档,因为大多数构建自定义方式在 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: 明确声明
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: 允许指定长双精度格式以避免运行时…
- #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)
f2py
的 meson
��端
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
旨在仅保证 C
和 Fortran
中的相同名称,而不是 Python
和 Fortran
中的相同名称。
(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)
f2py
的meson
后端
编译模式下的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
旨在仅保证C
和Fortran
中的相同名称,而不是Python
和Fortran
中的相同名称。
(gh-24555)
改进
f2py
的iso_c_binding
支持
以前,用户必须定义自己的自定义f2cmap
文件,以使用 Fortran2003 iso_c_binding
内在模块定义的类型映射。这些类型映射现在由f2py
原生支持。
(gh-24555)
f2py
的iso_c_binding
支持
以前,用户必须定义自己的自定义f2cmap
文件,以使用 Fortran2003 iso_c_binding
内在模块定义的类型映射。这些类型映射现在由f2py
原生支持。
(gh-24555)
构建系统更改
在此版本中,NumPy 已切换到 Meson 作为构建系统,meson-python 作为构建后端。安装 NumPy 或构建轮可以使用标准工具如pip
和pypa/build
。以下是支持的:
- 常规安装:
pip install numpy
或(在克隆的存储库中)pip install .
- 构建轮:
python -m build
(首选),或pip wheel .
- 可编辑安装:
pip install -e . --no-build-isolation
- 通过使用spin实现的自定义 CLI 进行开发构建:
spin build
。
所有常规的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“从源代码构建”文档,因为大多数构建定制方式在 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: 明确声明
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)
第二个示例返回:
代码语言: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)
)。以下表达式将报告弃用警告:
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)
第二个示例返回:
代码语言: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_
与标量可能导致不同的结果。主要潜在变化如下所示:
>>> 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)