SciPy 0.7.0 發行說明#

SciPy 0.7.0 是 16 個月辛勤工作的成果。它包含許多新功能、大量的錯誤修正、改進的測試覆蓋率和更好的文件。此版本中進行了一些棄用和 API 變更,這些變更記錄在下方。鼓勵所有使用者升級到此版本,因為其中有大量的錯誤修正和最佳化。此外,我們的開發重心現在將轉移到 0.7.x 分支上的錯誤修正版本,以及在開發主幹上新增新功能。此版本需要 Python 2.4 或 2.5 以及 NumPy 1.2 或更高版本。

請注意,由於我們正朝著 SciPy 1.0.0 版本邁進,SciPy 仍被視為具有「Beta」狀態。 1.0.0 版本將標誌著 SciPy 開發的一個重要里程碑,之後變更套件結構或 API 將變得更加困難。儘管這些 1.0 之前的版本被認為具有「Beta」狀態,但我們致力於使其盡可能沒有錯誤。例如,除了在此版本中修正大量錯誤外,自上次發行以來,我們還將單元測試的數量增加了一倍。

然而,在 1.0 版本發行之前,我們正在積極審查和改進功能、組織和介面。這樣做的目的是使套件盡可能連貫、直觀和實用。為了實現這一目標,我們需要使用者社群的幫助。具體來說,我們需要關於專案各個方面的回饋意見 — 所有方面 — 從我們實作的演算法到關於我們函數呼叫簽章的詳細資訊。

在過去一年中,我們看到了社群參與的迅速增加,以及許多基礎架構的改進,以降低貢獻的門檻(例如,更明確的編碼標準、改進的測試基礎架構、更好的文件工具)。在接下來的一年中,我們希望看到這種趨勢繼續下去,並邀請所有人更積極地參與。

Python 2.6 與 3.0#

我們投入了大量工作使 SciPy 與 Python 2.6 相容;但是,在這方面仍然存在一些問題。 2.6 支援的主要問題是 NumPy。在 UNIX(包括 Mac OS X)上,NumPy 1.2.1 大部分可以運作,但有一些注意事項。在 Windows 上,編譯過程存在問題。即將發行的 NumPy 1.3 版本將修正這些問題。任何剩餘的 SciPy 0.7 的 2.6 支援問題都將在錯誤修正版本中解決。

完全不支援 Python 3.0;它需要將 NumPy 移植到 Python 3.0。這需要付出巨大的努力,因為必須移植大量的 C 程式碼。向 3.0 的過渡仍在考慮中;目前,我們沒有關於此過渡的任何時間表或路線圖。

主要文件改進#

SciPy 文件已大幅改進;您可以線上檢視 HTML 參考手冊,或將其下載為 PDF 檔案。新的參考指南是使用流行的 Sphinx 工具建置的。

此版本還包含更新的教學課程,自 2005 年 SciPy 移植到 NumPy 以來,該教學課程一直不可用。儘管不全面,但本教學課程展示了如何使用 Scipy 的幾個基本部分。它還包含來自 numarray 手冊的 ndimage 文件。

儘管如此,文件方面仍需要更多努力。幸運的是,現在比以前更容易為 Scipy 文件做出貢獻:如果您發現文件的某一部分需要改進,並且想幫助我們,請在我們的基於網路的文件編輯器 https://scipy-docs.dev.org.tw/ 中註冊使用者名稱並更正問題。

執行測試#

NumPy 1.2 引入了一個基於 nose 的新測試框架。從此版本開始,SciPy 現在也使用新的 NumPy 測試框架。利用新的測試框架需要 nose 0.10 或更高版本。新框架的一個主要優點是它極大地簡化了單元測試的編寫 — 這已經得到了回報,因為測試的數量迅速增加。要執行完整的測試套件

>>> import scipy
>>> scipy.test('full')

如需更多資訊,請參閱 NumPy/SciPy 測試指南

我們也大幅提高了測試覆蓋率。在 0.6.0 版本中只有 2,000 多個單元測試;此版本幾乎使該數量翻倍,達到 4,000 多個單元測試。

建置 SciPy#

已新增對 NumScons 的支援。 NumScons 是 NumPy/SciPy 的一個試驗性新建置系統,它以 SCons 為核心。

SCons 是下一代建置系統,旨在取代歷史悠久的 Make,它具有 autoconf/automakeccache 的整合功能。 SCons 是用 Python 撰寫的,其組態檔是 Python 腳本。 NumScons 旨在取代 NumPy 的自訂版本 distutils,提供更進階的功能,例如 autoconf、改進的 Fortran 支援、更多工具以及對 numpy.distutils/scons 合作的支援。

Sandbox 已移除#

在 2005 年將 SciPy 移植到 NumPy 時,幾個套件和模組被移至 scipy.sandbox。 Sandbox 是正在快速開發且其 API 不穩定的套件的臨時區域。它也是存放損壞程式碼的地方。 Sandbox 很好地達成了其目的,但開始造成混亂。因此,scipy.sandbox 已被移除。大多數程式碼被移至 scipy,一些程式碼被製成 scikit,其餘程式碼則被直接刪除,因為該功能已被其他程式碼取代。

稀疏矩陣#

稀疏矩陣已獲得廣泛的改進。現在支援整數 dtype,例如 int8uint32 等。新增了兩種新的稀疏格式

  • 新類別 dia_matrix:稀疏 DIAgonal 格式

  • 新類別 bsr_matrix:區塊 CSR 格式

新增了幾個新的稀疏矩陣建構函數

  • sparse.kron:稀疏 Kronecker 乘積

  • sparse.bmatnumpy.bmat 的稀疏版本

  • sparse.vstacknumpy.vstack 的稀疏版本

  • sparse.hstacknumpy.hstack 的稀疏版本

已新增子矩陣和非零值的提取

  • sparse.tril:提取下三角

  • sparse.triu:提取上三角

  • sparse.find:非零值及其索引

csr_matrixcsc_matrix 現在支援切片和花式索引(例如,A[1:3, 4:7]A[[3,2,6,8],:])。現在可以在所有稀疏格式之間進行轉換

  • 使用成員函數,例如 .tocsr().tolil()

  • 使用 .asformat() 成員函數,例如 A.asformat('csr')

  • 使用建構函數 A = lil_matrix([[1,2]]); B = csr_matrix(A)

現在所有稀疏建構函數都接受密集矩陣和列表的列表。例如

  • A = csr_matrix( rand(3,3) )B = lil_matrix( [[1,2],[3,4]] )

已變更 spdiags 函數中對角線的處理方式。它現在與同名的 MATLAB(TM) 函數一致。

已對格式轉換和稀疏矩陣運算進行了許多效率改進。最後,此版本包含大量的錯誤修正。

統計套件#

已新增用於遮罩陣列的統計函數,並且可以透過 scipy.stats.mstats 存取。這些函數與 scipy.stats 中的對應函數相似,但尚未驗證它們是否具有相同的介面和演算法。

修正了統計函數的幾個錯誤,其中 kstestpercentileofscore 獲得了新的關鍵字引數。

meanmedianvarstdcovcorrcoef 新增了棄用警告。這些函數應由其 numpy 對應項取代。但是請注意,scipy.stats 和這些函數的 numpy 版本之間,某些預設選項有所不同。

stats.distributions 進行了許多錯誤修正:現在所有通用方法都可以正常運作,修正了個別分佈中的幾種方法。但是,更高階的矩(skewkurtosis)和熵仍然存在一些問題。最大概似估計器 fit 無法直接用於某些分佈 — 在某些情況下,必須仔細選擇起始值,在其他情況下,最大概似方法的通用實作可能不是數值上適當的估計方法。

我們預期在下一個 scipy 版本中會有更多的錯誤修正、數值精確度的提高和增強功能。

IO 套件的重新設計#

NumPy 和 SciPy 中的 IO 程式碼都正在進行廣泛的重新設計。 NumPy 將是儲存用於讀取和寫入 NumPy 陣列的基本程式碼的地方,而 SciPy 將儲存各種資料格式(資料、音訊、視訊、影像、matlab 等)的檔案讀取器和寫入器。

scipy.io 中的幾個函數已被棄用,將在 0.8.0 版本中移除,包括 npfilesaveloadcreate_modulecreate_shelfobjloadobjsavefopenread_arraywrite_arrayfreadfwritebswappackbitsunpackbitsconvert_objectarray。其中一些函數已被 NumPy 的原始讀取和寫入功能、記憶體對應功能或陣列方法取代。其他函數已從 SciPy 移至 NumPy,因為基本陣列讀取和寫入功能現在由 NumPy 處理。

Matlab (TM) 檔案讀取器/寫入器有許多改進

  • 預設版本 5

  • 用於結構、儲存格陣列和物件的 v5 寫入器

  • 用於函數控制代碼和 64 位元整數的 v5 讀取器/寫入器

  • loadmat 的新 struct_as_record 關鍵字引數,它將 matlab 中的結構陣列載入為 numpy 中的記錄陣列

  • 字串陣列具有 dtype='U...' 而不是 dtype=object

  • loadmat 不再壓縮單例維度,即預設情況下 squeeze_me=False

新的階層式分群模組#

此模組將新的階層式分群功能新增至 scipy.cluster 套件。函數介面與 MATLAB(TM) Statistics Toolbox 提供的函數相似,以幫助促進更容易地遷移到 NumPy/SciPy 框架。實作的連結方法包括單一連結、完整連結、平均連結、加權連結、質心連結、中位數連結和 Ward 連結。

此外,還提供了幾個函數來計算不一致統計量、共表型距離和後代之間的距離上限。fclusterfclusterdata 函數將階層式分群轉換為一組平面叢集。由於這些平面叢集是透過將樹狀結構切割成樹林來產生的,因此 leaders 函數會取得連結和平⾯叢集,並找到樹林中每棵樹的根。ClusterNode 類別將階層式分群表示為欄位可導航的樹狀物件。 to_tree 將矩陣編碼的階層式分群轉換為 ClusterNode 物件。提供了在 MATLAB 和 SciPy 連結編碼之間轉換的常式。最後,dendrogram 函數使用 matplotlib 將階層式分群繪製為樹狀圖。

新的空間套件#

新的空間套件包含空間演算法和資料結構的集合,適用於空間統計和分群應用程式。它包括用於計算精確和近似最近鄰的快速編譯程式碼,以及具有相同介面的純 Python kd 樹,但支援註解和各種其他演算法。由於使用者需求變得更加清晰,因此這兩個模組的 API 可能會有所變更。

它還包括一個 distance 模組,其中包含距離和相異度函數的集合,用於計算向量之間的距離,這對於空間統計、分群和 kd 樹非常有用。提供的距離和相異度函數包括 Bray-Curtis、Canberra、Chebyshev、City Block、Cosine、Dice、Euclidean、Hamming、Jaccard、Kulsinski、Mahalanobis、Matching、Minkowski、Rogers-Tanimoto、Russell-Rao、Squared Euclidean、Standardized Euclidean、Sokal-Michener、Sokal-Sneath 和 Yule。

pdist 函數計算向量集合中所有未排序的向量對之間的成對距離。cdist 計算兩個向量集合的笛卡爾乘積中所有向量對的距離。成對距離矩陣以精簡形式儲存;僅儲存上三角。squareform 在方形和精簡形式之間轉換距離矩陣。

重新設計的 fftpack 套件#

FFTW2、FFTW3、MKL 和 DJBFFT 包裝器已移除。僅保留 (NETLIB) fftpack。透過專注於一個後端,我們希望更輕鬆地新增新功能 — 例如 float32 支援。

新的常數套件#

scipy.constants 提供物理常數和轉換因子的集合。這些常數取自 CODATA 建議的基本物理常數值:2002。它們可以在 physics.nist.gov/constants 中找到。這些值以字典 physical_constants 的形式儲存為元組,其中包含值、單位和相對精度 — 按此順序排列。除非另有說明,否則所有常數均以 SI 單位表示。提供了幾個輔助函數。

新的徑向基底函數模組#

scipy.interpolate 現在包含一個徑向基底函數模組。徑向基底函數可用於平滑/內插 n 維中的分散資料,但在觀察到的資料範圍之外進行外插時應謹慎使用。

新的複數 ODE 積分器#

scipy.integrate.ode 現在包含 ZVODE 複數值常微分方程式求解器(由 Peter N. Brown、Alan C. Hindmarsh 和 George D. Byrne 撰寫)的包裝器。

新的廣義對稱與 Hermitian 特徵值問題求解器#

scipy.linalg.eigh 現在包含更多 LAPACK 對稱和 Hermitian 特徵值問題求解器的包裝器。使用者現在可以解決廣義問題、僅選擇一系列特徵值,並選擇使用更快的演算法,但會增加記憶體使用量。 scipy.linalg.eigh 的簽章也隨之變更。

插值套件中的錯誤修正#

如果內插資料具有 2 個以上的維度,並且軸關鍵字設定為非預設值,則 scipy.interpolate.interp1d 的傳回值形狀過去不正確。這已修正。此外,如果輸入是純量,interp1d 現在會傳回純量 (0D 陣列)。如果 scipy.interpolate.interp1d 的使用者依賴先前的行為,則可能需要修改其程式碼。

Weave 清理#

scipy.weave 有許多改進。作者已重新授權 blitz++,使其與 SciPy 授權相容。 wx_spec.py 已移除。

已知問題#

以下是 scipy 0.7.0 的已知問題

  • windows 上的 weave 測試失敗:這些是已知的,並且正在修訂。

  • gcc 4.3 (std::labs) 的 weave 測試失敗:這是 gcc 4.3 錯誤。一種解決方法是在 scipy/weave/blitz/blitz/funcs.h (第 27 行) 中新增 #include <cstdlib>。您可以在已安裝的 scipy (在 site-packages 中) 進行變更。