SciPy 1.2.0 發行說明#
SciPy 1.2.0 是 6 個月辛勤工作的成果。它包含許多新功能、大量的錯誤修復、改進的測試覆蓋率和更好的文件。在此版本中,有許多棄用和 API 變更,這些變更記錄在下方。我們鼓勵所有使用者升級到此版本,因為其中有大量的錯誤修復和最佳化。在升級之前,我們建議使用者檢查他們自己的程式碼是否未使用已棄用的 SciPy 功能(若要執行此操作,請使用 python -Wd
執行您的程式碼,並檢查 DeprecationWarning
)。我們的開發重心現在將轉移到 1.2.x 分支上的錯誤修復版本,以及在 master 分支上新增新功能。
此版本需要 Python 2.7 或 3.4+ 以及 NumPy 1.8.2 或更高版本。
注意
這將是最後一個支援 Python 2.7 的 SciPy 版本。因此,1.2.x 系列將是長期支援 (LTS) 版本;我們將回溯錯誤修復至 2020 年 1 月 1 日。
對於在 PyPy 上執行,需要 PyPy3 6.0+ 和 NumPy 1.15.0。
本次發行的重點#
具有新求解器
toms748
和新統一介面root_scalar
的一維求根改進結合隨機和局部確定性搜尋的新
dual_annealing
最佳化方法新的最佳化演算法
shgo
(單純同調全局最佳化),用於無導數最佳化問題在
scipy.spatial.transform
中提供新的基於四元數轉換的類別
新功能#
scipy.ndimage
改進#
已為 scipy.ndimage.rotate
的 mirror
、wrap
和 reflect
模式新增了正確的 spline 係數計算。
scipy.fftpack
改進#
現在 scipy.fftpack
中支援 DCT-IV、DST-IV、DCT-I 和 DST-I 正交化。
scipy.interpolate
改進#
scipy.interpolate.pade
現在接受分子階數的新參數。
scipy.cluster
改進#
scipy.cluster.vq.kmeans2
獲得了一種新的初始化方法,kmeans++。
scipy.special
改進#
函數 softmax
已新增至 scipy.special
。
scipy.optimize
改進#
一維非線性求解器已獲得統一介面 scipy.optimize.root_scalar
,類似於多維求解器的 scipy.optimize.root
介面。scipy.optimize.root_scalar(f, bracket=[a ,b], method="brenth")
等效於 scipy.optimize.brenth(f, a ,b)
。如果未指定 method
,則將根據括號和可用的導數數量選擇適當的方法。
Alefeld、Potra 和 Shi 用於在封閉區間內求根的所謂演算法 748 已新增為 scipy.optimize.toms748
。這提供了保證收斂到根,每個函數評估的收斂速度約為 1.65(對於充分表現良好的函數)。
differential_evolution
現在具有 updating
和 workers
關鍵字。第一個在最佳解向量的連續更新(預設)或每個世代一次之間進行選擇。連續更新可以加快收斂速度。workers
關鍵字接受 int
或類似 map 的可調用物件,並平行化求解器(具有每個世代更新一次的副作用)。提供 int
會在 N 個平行部分中評估試驗解。提供類似 map 的可調用物件允許使用其他平行化方法(例如 mpi4py
或 joblib
)。
dual_annealing
(以及下方的 shgo
)是一種強大的新通用全局最佳化 (GO) 演算法。dual_annealing
使用兩個退火過程來加速收斂到目標數學函數的全局最小值。第一個退火過程控制隨機馬可夫鏈搜尋,第二個退火過程控制確定性最小化。因此,雙退火是一種混合方法,它以有效的方式利用隨機和局部確定性搜尋。
shgo
(單純同調全局最佳化)是一種類似的演算法,適用於解決黑箱和無導數最佳化 (DFO) 問題。該演算法通常在有限時間內收斂到全局解。收斂適用於非線性不等式和等式約束。除了返回全局最小值之外,該演算法還返回每次迭代後找到的任何其他全局和局部最小值。這使其可用於探索域中的解。
scipy.optimize.newton
現在可以接受純量或陣列。
MINPACK
使用現在是執行緒安全的,因此 MINPACK
+ 回調可以在多個執行緒上使用。
scipy.signal
改進#
數位濾波器設計函數現在包含一個參數來指定取樣率。以前,數位濾波器只能使用正規化頻率指定,但不同的函數使用不同的比例(例如,butter
的 0 到 1 與 freqz
的 0 到 π),導致錯誤和混淆。使用 fs
參數,現在可以直接在函數中輸入普通頻率,正規化在內部處理。
如果峰值屬性具有意外值(例如,突出度為 0),find_peaks
和相關函數不再引發異常。而是給出 PeakPropertyWarning
。
新的關鍵字引數 plateau_size
已新增至 find_peaks
。plateau_size
可用於根據峰值平坦頂部的長度選擇峰值。
scipy.signal
中的 welch()
和 csd()
方法現在支援計算中值平均 PSD,使用 average='mean'
關鍵字。
scipy.sparse
改進#
scipy.sparse.bsr_matrix.tocsr
方法現在直接實作,而不是透過 COO 格式轉換,並且 scipy.sparse.bsr_matrix.tocsc
方法現在也透過 CSR 轉換而不是 COO 路由。現在提高了兩種轉換的效率。
修復了 SuperLU 或 UMFPACK 求解器在 scipy.sparse.linalg
中以非標準格式崩潰的矩陣的問題。求解器包裝器在調用 SuperLU 或 UMFPACK 求解器之前,會在必要時規範化矩陣。
修復了 scipy.sparse.linalg.lobpcg() 的 largest
選項,使其具有正確(和預期)的行為。特徵值的順序與 ARPACK 求解器 (eigs()
) 一致,即對於最小特徵值升序,對於最大特徵值降序。
scipy.sparse.random
函數現在更快,並且還透過將適當的值傳遞給 dtype
引數來支援整數和複數值。
scipy.spatial
改進#
修改了 scipy.spatial.distance.jaccard
函數,以在比較兩個全零向量時返回 0 而不是 np.nan
。
在 scipy.spatial.distance.jensenshannon
下新增了對 Jensen Shannon 距離(散度的平方根)的支援。
在函數 scipy.spatial.cKDTree.query_ball_point() 中新增了一個可選關鍵字,用於對返回的索引進行排序或不排序。不對索引進行排序可以加快調用速度。
在 scipy.spatial.transform
中提供新的基於四元數轉換的類別,包括旋轉的球面線性插值 (Slerp
)、與四元數、歐拉角和一般旋轉和反轉功能 (spatial.transform.Rotation) 之間的轉換,以及 3D 旋轉的均勻隨機取樣 (spatial.transform.Rotation.random)。
scipy.stats
改進#
現在支援 Yeo-Johnson 冪轉換 (yeojohnson
、yeojohnson_llf
、yeojohnson_normmax
、yeojohnson_normplot
)。與 Box-Cox 轉換不同,Yeo-Johnson 轉換可以接受負值。
在新的函數 rvs_ratio_uniforms
中新增了一種通用方法,僅根據密度對隨機變數進行取樣。
新增了 Yule-Simon 分佈 (yulesimon
) – 這是一種新的離散機率分佈。
stats
和 mstats
現在可以存取新的迴歸方法 siegelslopes
,這是一種穩健的線性迴歸演算法
scipy.stats.gaussian_kde
現在能夠處理加權樣本,並且效能應該有適度的提升
現在支援 scipy.stats.levy_stable
的 Levy Stable 參數估計、PDF 和 CDF 計算。
Brunner-Munzel 檢定現在在 stats
和 mstats
中以 brunnermunzel
提供。
scipy.linalg
改進#
scipy.linalg.lapack
現在公開使用矩形全封裝儲存 (RFP) 的 LAPACK 常式,用於上三角、下三角、對稱或 Hermitian 矩陣;現在也可以使用上梯形胖矩陣 RZ 分解常式。
已棄用的功能#
已棄用 scipy.special
中的函數 hyp2f0
、hyp1f2
和 hyp3f0
。
向後不相容的變更#
現在需要 LAPACK 版本 3.4.0 或更高版本。不再支援使用 Apple Accelerate 建置。
函數 scipy.linalg.subspace_angles(A, B)
現在針對所有角度給出正確的結果。在此之前,該函數僅針對大於 π/4 的角度傳回正確的值。
已移除對 Bento 建置系統的支援。Bento 已多年未維護,並且沒有良好的 Python 3 或 wheel 支援,因此是時候移除它了。
已變更 scipy.optimize.lingprog method=simplex
回調函數的必要簽名。在迭代開始之前,單純形求解器首先將問題轉換為標準形式,該標準形式通常與使用者定義的問題具有不同的變數或約束。以前,單純形求解器會將多個單獨的引數(例如,與此標準形式問題對應的當前解向量 xk
)傳遞給使用者指定的回調函數。不幸的是,標準形式問題與使用者定義問題之間的關係未記錄在案,這限制了傳遞給回調函數的資訊的實用性。
除了大量的錯誤修復變更之外,單純形求解器現在將包含直接對應於使用者定義問題的資訊的單個 OptimizeResult
物件傳遞給使用者指定的回調函數。在未來的版本中,可能會擴充此 OptimizeResult
物件以包含其他資訊,例如與標準形式問題對應的變數以及有關標準形式問題與使用者定義問題之間關係的資訊。
已變更 scipy.sparse.random
的實作,這會影響某些矩陣形狀和給定種子的 sparse.random
和 sparse.rand
傳回的數值。
scipy.optimize.newton
將不再在對收斂產生負面影響的情況下使用 Halley 方法。