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 上為這些平台提供 Wheels(採用 manylinux2014 標準),並且對這些平台的需求越來越頻繁。

此外,使用 TravisCI 在 CI 中加入 IBM Z(或 s390x)現在是可能的,但尚未完成 - 並且那時也可能為該平台提供 manylinux2014 wheels。最後,解決未解決的 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 的棄用/移除。