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.optimize
和 scipy.interpolate
函式在這方面尤其常被要求。
統計增強功能#
以下 scipy.stats
增強功能以及詳細 SciPy 路線圖中列出的功能,對專案而言尤其重要。
徹底改革單變數分佈基礎架構,以解決長期存在的問題(例如,請參閱gh-15928。)
在
stats
函式中一致地處理nan_policy
、axis
引數和遮罩陣列(在適當的情況下)。
支援更多硬體平台#
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
的棄用/移除。