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 关键字——这可以在更多函数中采用。

让用户更容易在其依赖 SciPy 功能的代码中使用 Numba 的 @njit 将释放大量性能增益。但这需要一个策略,所有解决方案都还在成熟中(例如请参阅 此概述)。

最后,许多独立函数可以进行性能优化。scipy.optimizescipy.interpolate 函数在这方面尤其受到频繁请求。

支持更多硬件平台#

SciPy 现在支持 ARM64(或 aarch64)和 POWER8/9(或 ppc64le)的持续集成,并且二进制文件可通过 Miniforge 获取。这些平台在 PyPI 上的 Wheel 包现在也已成为可能(采用 manylinux2014 标准),并且对它们的需求也越来越频繁。

此外,现在可以使用 TravisCI 在 CI 中支持 IBM Z(或 s390x),但尚未完成——届时该平台的 manylinux2014 wheel 包也将成为可能。最后,解决未决的 AIX 构建问题将有助于用户。

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

SciPy 稀疏矩阵正在被稀疏数组取代。稀疏矩阵格式的功能大部分已完善,但它们的主要问题是行为类似于 numpy.matrix(该类将在 NumPy 的某个版本中被弃用)。我们想要的是行为类似于 numpy.ndarray 的稀疏数组(参见 gh-18915 的讨论)。截至 1.15 版本,稀疏数组支持稀疏矩阵的所有功能。除了二维数组,DOK、COO、CSR 格式也支持一维稀疏数组。例如,n 维数组支持和某些操作的广播等进一步功能正在开发中。未来的计划是

  • 将稀疏数组 API 扩展到 n 维数组
    • COO、CSR 和 DOK 格式。COO 格式已部分到位。

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

  • 稀疏数组的二进制运算将在某些设置中支持广播。广播对于稀疏数组来说很棘手,因为它严重依赖于密集数组的步进内存模型,因此并不总是适合稀疏数据格式。我们乐观的目标是支持对所有适用于稀疏数据结构的操作进行广播。我们从 A + B 等二进制操作开始。

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

  • 弃用并最终移除“稀疏矩阵”,转而使用“稀疏数组”。

  • 与 NumPy 合作,共同弃用/移除 numpy.matrix