SciPy 0.8.0 發行說明#

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

請注意,SciPy 仍被認為具有「Beta」狀態,因為我們正朝著 SciPy 1.0.0 版本邁進。1.0.0 版本將標誌著 SciPy 開發中的一個重要里程碑,在此之後,變更套件結構或 API 將變得更加困難。雖然這些 1.0 前的版本被認為具有「Beta」狀態,但我們致力於使其盡可能沒有錯誤。

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

Python 3#

Python 3 相容性已在計畫中,目前在技術上是可行的,因為 Numpy 已被移植。但是,由於與 Python 3 相容的 Numpy 1.5 尚未發布,因此 Scipy 0.8 中尚未包含對 Python 3 的支援。計畫於 2010 年秋季發布的 SciPy 0.9 很可能包含對 Python 3 的實驗性支援。

主要文件改進#

SciPy 文件已大幅改進。

已棄用的功能#

交換相關函數的輸入 (scipy.signal)#

涉及 correlate、correlate2d、convolve 和 convolve2d。如果第二個輸入大於第一個輸入,則在呼叫底層計算常式之前會交換輸入。此行為已被棄用,將在 scipy 0.9.0 中移除。

過時程式碼已棄用 (scipy.misc)#

來自 scipy.misc 的模組 helpmodppimportpexec 已被棄用。它們將在 SciPy 版本 0.9 中移除。

其他棄用#

  • linalg:函數 solveh_banded 目前傳回一個元組,其中包含 Cholesky 分解和線性系統的解。在 SciPy 0.9 中,傳回值將僅為解。

  • 函數 constants.codata.find 將產生 DeprecationWarning。在 Scipy 版本 0.8.0 中,關鍵字引數 'disp' 已新增至函數,預設值為 'True'。在 0.9.0 中,預設值將為 'False'。

  • signal.chirpqshape 關鍵字引數已棄用。請改用引數 vertex_zero

  • 將多項式的係數作為引數 f0 傳遞給 signal.chirp 已被棄用。請改用函數 signal.sweep_poly

  • io.recaster 模組已被棄用,將在 0.9.0 中移除。

新功能#

DCT 支援 (scipy.fftpack)#

已新增新的 realtransforms,即用於離散餘弦轉換的 dct 和 idct;類型 I、II 和 III 可用。

fft 函數的單精度支援 (scipy.fftpack)#

fft 函數現在也可以處理單精度輸入:如果 x 是單精度,則 fft(x) 將傳回單精度陣列。

目前,對於非 2、3 和 5 的複合數的 FFT 大小,轉換會在內部以雙精度計算,以避免 FFTPACK 中的捨入誤差。

相關函數現在實作常用的定義 (scipy.signal)#

輸出現在應與其 matlab 和 R 對應項對應,並且在傳遞 old_behavior=False 引數時執行大多數人期望的操作

  • correlate、convolve 及其 2d 對應項不再根據其相對形狀交換其輸入;

  • 相關函數現在在計算滑動總和乘積時會共軛其第二個引數,這對應於相關性的常用定義。

LTI 函數的新增和修改 (scipy.signal)#

  • 函數 impulse2step2 已新增至 scipy.signal。它們分別使用函數 scipy.signal.lsim2 來計算系統的脈衝和步階響應。

  • 已變更函數 scipy.signal.lsim2 以將任何其他關鍵字引數傳遞給 ODE 解算器。

改進的波形產生器 (scipy.signal)#

scipy.signal 中的 chirp 函數進行了多項改進

  • 更正了當 method="logarithmic" 時產生的波形;它現在產生一個也稱為「指數」或「幾何」啁啾的波形。(請參閱 https://en.wikipedia.org/wiki/Chirp。)

  • 新增了一個新的 chirp 方法「hyperbolic」。

  • 現在 chirp 使用關鍵字 vertex_zero(布林值)而不是關鍵字 qshape

  • chirp 不再處理任意多項式。此功能已移至新函數 sweep_poly

新增了一個新函數 sweep_poly

scipy.linalg 中的新函數和其他變更#

函數 cho_solve_bandedcirculantcompanionhadamardleslie 已新增至 scipy.linalg

已增強函數 block_diag 以接受純量和 1D 引數,以及常用的 2D 引數。

scipy.optimize 中的新函數和變更#

已新增 curve_fit 函數;它採用一個函數並使用非線性最小平方來將其擬合到提供的資料。

現在,當為單個參數求解時,leastsqfsolve 函數會傳回大小為 1 的陣列,而不是純量。

新的稀疏最小平方解算器#

已將 lsqr 函數新增至 scipy.sparse此常式會找到大型、稀疏、線性方程組的最小平方解。

基於 ARPACK 的稀疏 SVD#

scipy.sparse.linalg._eigen.arpack 中提供了稀疏矩陣 SVD 的樸素實作。它基於對 <A, A> 使用對稱解算器,因此可能不是很精確。

scipy.constants.find 的替代行為可用scipy.constants.find#

關鍵字引數 disp 已新增至函數 scipy.constants.find,預設值為 True。當 dispTrue 時,行為與 Scipy 版本 0.7 中的行為相同。當 False 時,函數會傳回金鑰清單,而不是列印它們。(在 SciPy 版本 0.9 中,預設值將會反轉。)

不完整的稀疏 LU 分解#

Scipy 現在封裝了 SuperLU 4.0 版,該版本支援不完整的稀疏 LU 分解。這些可以透過 scipy.sparse.linalg.spilu 存取。升級到 SuperLU 4.0 也修正了一些已知的錯誤。

更快速的 matlab 檔案讀取器和預設行為變更#

我們已在 Cython 中重寫了 matlab 檔案讀取器,現在它應以與 Matlab 相同的速度讀取 matlab 檔案。

讀取器會讀取 matlab 具名和匿名函數,但無法寫入它們。

在 scipy 0.8.0 之前,我們已將 matlab 結構的陣列作為 numpy 物件陣列傳回,其中物件具有以結構欄位命名的屬性。從 0.8.0 開始,我們將 matlab 結構作為 numpy 結構化陣列傳回。您可以透過使用 scipy.io.loadmat 和 friends 的選用 struct_as_record=False 關鍵字引數來取得舊行為。

matlab 檔案寫入器存在不一致之處,因為它在 matlab 5 檔案中將 numpy 1D 陣列寫為行向量,而在 matlab 4 檔案中寫為列向量。我們將在下一個版本中變更此設定,因此兩者都寫入列向量。呼叫寫入器時,會有 FutureWarning 來警告此變更;目前,我們建議對 scipy.io.savemat 和 friends 使用 oned_as='row' 關鍵字引數。

更快速的正交多項式評估#

可以使用 scipy.special 中的新向量化函數評估正交多項式的值:eval_legendreeval_chebyteval_chebyueval_chebyceval_chebyseval_jacobieval_laguerreeval_genlaguerreeval_hermiteeval_hermitenormeval_gegenbauereval_sh_legendreeval_sh_chebyteval_sh_chebyueval_sh_jacobi。這比建構多項式的完整係數表示法更快,而完整係數表示法以前是唯一可用的方法。

請注意,先前的正交多項式常式現在也會在可能的情況下調用此功能。

Lambert W 函數#

現在可以使用 scipy.special.lambertw 來評估 Lambert W 函數。

改進的超幾何 2F1 函數#

修訂了 scipy.special.hyp2f1 對於實數參數的實作。新版本應為所有實數參數產生精確值。

更彈性的徑向基底函數內插介面#

除了可以使用字串引數選取的內建徑向基底函數之外,scipy.interpolate.Rbf 類別現在接受可呼叫物件作為「函數」引數的輸入。

已移除的功能#

scipy.stsci:套件已移除

模組 scipy.misc.limits 已移除。

scipy.io#

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

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