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 上为这些平台提供轮子(使用 manylinux2014 标准),并且对这些轮子的需求越来越频繁。

此外,现在可以使用 TravisCI 在 CI 中使用 IBM Z(或 s390x),但尚未完成 - 然后也可以为该平台提供 manylinux2014 轮子。最后,解决 AIX 构建中的未解决问题将有助于用户。

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

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

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

      • CSR 1D 格式使用 2D CSR 代码来执行 1D 操作,例如索引/最小值-最大值/算术运算。

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

  • 弃用并最终删除“稀疏矩阵”,以支持“稀疏数组”。

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