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