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 的模組 helpmod、ppimport 和 pexec 已被棄用。它們將在 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.chirp 的 qshape 關鍵字引數已棄用。請改用引數 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)#
函數 impulse2 和 step2 已新增至
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_banded、circulant、companion、hadamard 和 leslie 已新增至 scipy.linalg
。
已增強函數 block_diag 以接受純量和 1D 引數,以及常用的 2D 引數。
scipy.optimize 中的新函數和變更#
已新增 curve_fit 函數;它採用一個函數並使用非線性最小平方來將其擬合到提供的資料。
現在,當為單個參數求解時,leastsq 和 fsolve 函數會傳回大小為 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。當 disp 為 True 時,行為與 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_legendre、eval_chebyt、eval_chebyu、eval_chebyc、eval_chebys、eval_jacobi、eval_laguerre、eval_genlaguerre、eval_hermite、eval_hermitenorm、eval_gegenbauer、eval_sh_legendre、eval_sh_chebyt、eval_sh_chebyu、eval_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
中的多個函數,包括:npfile、save、load、create_module、create_shelf、objload、objsave、fopen、read_array、write_array、fread、fwrite、bswap、packbits、unpackbits 和 convert_objectarray。其中一些函數已被 NumPy 的原始讀寫功能、記憶體對應功能或陣列方法取代。其他函數已從 SciPy 移至 NumPy,因為基本陣列讀寫功能現在由 NumPy 處理。