NumPy 路线图#

这是我们将投入资源的任务和功能的实时快照。它可用于鼓励和激励开发人员以及寻找资金。

互操作性#

我们的目标是让与 NumPy 的互操作变得更加容易。有许多类似 NumPy 的包为 Python 生态系统添加了有趣的新功能,还有许多库以各种方式扩展了 NumPy 的模型。在 NumPy 中工作以促进与所有此类包以及使用它们的代码的互操作性,可能包括(除其他外)互操作性协议、更好的鸭子类型支持和 ndarray 子类处理。

主要目标是:使为 NumPy 编写的代码也可以轻松地与其他类似 NumPy 的项目一起使用。numpy.ndarray这将通过 CuPy 或 JAX 等方式实现 GPU 支持,通过 Dask 实现分布式数组支持,并编写与 SciPy、scikit-learn 和其他此类软件包良好配合的专用数组(无论是从头开始,还是作为子类)。

__array_ufunc__和协议__array_function__稳定,但不覆盖整个API。需要新的协议来覆盖 NumPy 中的其他功能。该领域的工作旨在完成以下一项或多项提案:

此外,我们的目标是提供方法,使其他库更容易实现 NumPy 兼容的 API。这可能包括定义 API 的一致子集,如NEP 37 的本节中所讨论的。

表现

NumPy 性能的改进对于许多用户来说非常重要。我们将这项工作重点放在通用 SIMD(请参阅NEP 38 — 使用 SIMD 优化指令提高性能)内在函数上,它通过抽象层在各种硬件平台上提供了很好的改进。基础设施已就位,我们欢迎后续 PR 在所有相关 NumPy 函数中添加 SIMD 支持。

其他绩效改进想法包括:

  • 关于并行执行的更好的故事。

  • 个别功能的优化。

  • 减少 ufunc 和__array_function__开销。

此外,我们希望在覆盖范围、易用性以及 作为文档或网站的一部分发布结果(现在在这里)方面改进基准测试系统。

文档和网站#

NumPy文档的质量参差不齐。 API 文档状况良好;许多主题的教程和高级文档丢失或过时。请参阅NEP 44 — 重构 NumPy 文档以进行计划的改进。numpy-tutorials repo中正在添加更多教程 。

我们的网站()最近完全重新设计。我们的目标是通过添加翻译、更多案例研究和其他高级内容等来进一步改进它(请参阅此跟踪问题)。

可扩展性#

我们的目标是让扩展 NumPy 变得更加容易。这里的主要主题是改进数据类型系统 - 请参阅NEP 41 - 迈向新数据类型系统和与之链接的相关 NEP 的第一步。数据类型系统重写的具体目标是:

  • 更简单的自定义数据类型:

    • 简化和/或包装当前的 C-API

    • 对 dtype 元数据的更一致的支持

    • 支持用 Python 编写数据类型

  • 允许添加新的字符串数据类型。这可以是具有固定宽度存储(例如,utf8latin1)和/或可变长度字符串数据类型的编码字符串。后者可以与 共享一个实现dtype=object,但要进行显式类型检查。其中之一可能应该是文本数据的默认值。当前的字符串数据类型支持既不高效也不用户友好。

用户体验

输入注释#

NumPy 1.20 为大多数 NumPy 功能添加了类型注释,因此用户可以使用mypy等工具对其代码进行类型检查,IDE 可以改进对 NumPy 的支持。正在改进这些类型注释,例如支持注释数组形状和数据类型。

平台支持#

我们的目标是增加对不同硬件架构的支持。这包括在 CI 服务可用时添加 CI 覆盖范围、为 POWER8/9 ( ppc64le) 提供 PyPI 轮子、提供更好的构建和安装文档以及解决 AIX 等其他平台上的构建问题。

维护

  • MaskedArray需要改进的地方,想法包括:

    • 将屏蔽数组重写为不是 ndarray 子类 - 也许在单独的项目中?

    • MaskedArray 作为鸭子数组类型,和/或

    • 支持缺失值的数据类型

  • Fortran 集成numpy.f2py需要进行大量改进,请参阅 此跟踪问题

  • 一个后端系统numpy.fft(这样egfft-mkl就不需要monkeypatch numpy)。

  • 编写一个关于如何处理 NumPy 和 SciPy 之间重叠的策略linalg

  • 弃用np.matrix(非常缓慢)。

  • 为“矢量化索引”和“外部索引”添加新的索引模式(请参阅NEP 21 — 简化和显式高级索引)。

  • 使多项式 API 更易于使用。

  • 集成改进的文本文件加载器。

  • Ufunc 和 gufunc 改进,请参阅gh-8892gh-11492