SciPy 路线图#

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

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

NumPy 通过 __array_function____array_ufunc__ 将其 API 与执行引擎分离。这将使 SciPy 的部分功能能够接受分布式数组(例如 dask.array.Array)和 GPU 数组(例如 cupy.ndarray),这些数组实现了 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 标准),并且对这些轮子的请求变得越来越频繁。

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

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

稀疏矩阵格式在功能上基本完整,但主要问题是它们表现得像 numpy.matrix``(这在 NumPy 的某个时候将被弃用)。我们想要的是表现得像 ``numpy.ndarray 的稀疏 *数组*(参见 gh-18915 的讨论)。稀疏数组在 scipy.sparse 中已经基本实现。一些功能仍在完善中。未来的计划是:

  • 提供一个功能齐全的稀疏数组API(包括一维数组)。
    • 扩展稀疏数组API至一维数组:
      • COO、CSR 和 DOK 格式。

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

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

  • 弃用并移除“稀疏矩阵”,改为使用“稀疏数组”。

  • numpy.matrix 的弃用/移除上与 NumPy 合作。