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
/automake
和 ccache
的整合功能。 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,例如 int8
、uint32
等。新增了兩種新的稀疏格式
新類別
dia_matrix
:稀疏 DIAgonal 格式新類別
bsr_matrix
:區塊 CSR 格式
新增了幾個新的稀疏矩陣建構函數
sparse.kron
:稀疏 Kronecker 乘積sparse.bmat
:numpy.bmat
的稀疏版本sparse.vstack
:numpy.vstack
的稀疏版本sparse.hstack
:numpy.hstack
的稀疏版本
已新增子矩陣和非零值的提取
sparse.tril
:提取下三角sparse.triu
:提取上三角sparse.find
:非零值及其索引
csr_matrix
和 csc_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
中的對應函數相似,但尚未驗證它們是否具有相同的介面和演算法。
修正了統計函數的幾個錯誤,其中 kstest
和 percentileofscore
獲得了新的關鍵字引數。
為 mean
、median
、var
、std
、cov
和 corrcoef
新增了棄用警告。這些函數應由其 numpy 對應項取代。但是請注意,scipy.stats
和這些函數的 numpy 版本之間,某些預設選項有所不同。
對 stats.distributions
進行了許多錯誤修正:現在所有通用方法都可以正常運作,修正了個別分佈中的幾種方法。但是,更高階的矩(skew
、kurtosis
)和熵仍然存在一些問題。最大概似估計器 fit
無法直接用於某些分佈 — 在某些情況下,必須仔細選擇起始值,在其他情況下,最大概似方法的通用實作可能不是數值上適當的估計方法。
我們預期在下一個 scipy 版本中會有更多的錯誤修正、數值精確度的提高和增強功能。
IO 套件的重新設計#
NumPy 和 SciPy 中的 IO 程式碼都正在進行廣泛的重新設計。 NumPy 將是儲存用於讀取和寫入 NumPy 陣列的基本程式碼的地方,而 SciPy 將儲存各種資料格式(資料、音訊、視訊、影像、matlab 等)的檔案讀取器和寫入器。
scipy.io
中的幾個函數已被棄用,將在 0.8.0 版本中移除,包括 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 處理。
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 連結。
此外,還提供了幾個函數來計算不一致統計量、共表型距離和後代之間的距離上限。fcluster
和 fclusterdata
函數將階層式分群轉換為一組平面叢集。由於這些平面叢集是透過將樹狀結構切割成樹林來產生的,因此 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 中) 進行變更。