SciPy 路线图#

此路线图页面仅包含 SciPy 未来发展的最重要想法和需求。有关更详细的路线图,包括每个子包的状态、更多想法、API 稳定性等,请参阅详细的 SciPy 路线图

支持分布式数组和 GPU 数组#

NumPy 使用 __array_function____array_ufunc__ 将其 API 与执行引擎分离。这将使 SciPy 的部分能够接受实现 ndarray 接口的分布式数组(例如,dask.array.Array)和 GPU 数组(例如,cupy.ndarray)。目前尚不清楚哪些算法可以直接使用,以及在可以工作时是否会有显著的性能提升。我们希望创建一个 SciPy API 的哪些部分可以工作的映射,并随着时间的推移改进支持。

除了使用 NumPy 协议(如 __array_function__)之外,我们也可以在 SciPy 中使用这些协议。这将使得重新(实现)SciPy 函数成为可能,例如,scipy.signal 中的函数,用于 Dask 或 GPU 数组(请参阅 NEP 18 - 在 NumPy 之外使用)。NumPy 在这些领域的功能仍在发展中,例如,请参阅 NEP 37 - 用于类 NumPy 模块的调度协议,而 SciPy 是这些功能的一个重要的“客户端”。

性能改进#

速度提升、降低内存使用以及并行化算法的能力对大多数科学领域和用例都有好处。我们已经建立了一个用于多处理的 API 设计模式——使用 workers 关键字——可以在更多的函数中采用该模式。

启用像 Pythran 这样的加速器(可能通过 Transonic)的使用,并使用户更容易在依赖 SciPy 功能的代码中使用 Numba 的 @njit,将释放大量的性能提升。但这需要一个策略,所有解决方案都还在成熟中(例如,请参阅此概述)。

最后,许多单独的函数可以针对性能进行优化。scipy.optimizescipy.interpolate 函数在这方面尤其经常被要求。

统计增强#

以下 scipy.stats 增强功能和详细的 SciPy 路线图中列出的增强功能对该项目尤为重要。

  • 彻底检查单变量分布基础设施,以解决长期存在的问题(例如,请参阅gh-15928。)

  • stats 函数中一致地处理 nan_policyaxis 参数和屏蔽数组(在适当的情况下)。

支持更多硬件平台#

SciPy 现在为 ARM64(或 aarch64)和 POWER8/9(或 ppc64le)提供了持续集成,并且可以通过 Miniforge 获取二进制文件。现在也可以在 PyPI 上为这些平台提供 Wheels(使用 manylinux2014 标准),并且对此类请求的频率越来越高。

此外,现在可以通过 TravisCI 在 CI 中加入 IBM Z(或 s390x),但这尚未完成 - 并且那时也可以为该平台提供 manylinux2014 Wheels。最后,解决公开的 AIX 构建问题将有助于用户。

除了稀疏矩阵之外,还实现稀疏数组#

稀疏矩阵格式在很大程度上已完成,但是主要问题是它们的行为类似于 numpy.matrix(将在 NumPy 的某个时候被弃用)。我们想要的是行为类似于 numpy.ndarray 的稀疏*数组*(请参阅gh-18915中的讨论)。此时,稀疏数组已在 scipy.sparse 中基本实现。一些功能仍在完善中。未来的计划是

  • 提供功能完整的稀疏数组 API(包括一维数组)。
    • 将稀疏数组 API 扩展到一维数组
      • COO、CSR 和 DOK 格式。

      • CSR 一维格式使用二维 CSR 代码来执行索引/最小-最大/算术等一维操作。

  • 帮助其他库将稀疏矩阵转换为稀疏数组。创建过渡指南和有用的脚本来标记需要更改的代码。

  • 弃用然后删除“稀疏矩阵”,改为使用“稀疏数组”。

  • 与 NumPy 合作,弃用/删除 numpy.matrix