要了解 Numerical Python 軟件包的第一件事情是,Numerical Python 不會讓您去做標準 Python 不能完成的任何工作。它只是讓您 以快得多的速度去完成標準 Python 能夠完成的相同任務。實際上不僅僅如此;許多數組操作用 Numeric 或者 Numarray 來表達比起用標準 Python 數據類型和語法來表達要優雅得多。不過,驚人的速度才是吸引用戶使用 Numerical Python 的主要原因。
其實,Numerical Python 只是實現了一個新的數據類型:數組。與可以包含不同類型元素的列表、元組和詞典不同的是,Numarray 數組只能包含同一類型的數據。Numarray 數組的另一個優點是,它可以是多維的 -- 但是數組的維度與列表的簡單嵌套稍有不同。Numerical Python 借鑒了程序員的實踐經驗(尤其是那些有科學計算背景的程序員,他們抽象出了 APL、FORTRAN、MATLAB 和 S 等語言中數組的最佳功能),創建了可以靈活改變形狀和維度的數組。我們很快會回來繼續這一話題。
在 Numerical Python 中對數組的操作是 按元素進行的。雖然二維數組與線性代數中的矩陣類似,但是對它們的操作 (比如乘) 與線性代數中的操作 (比如矩陣乘) 是完全不同的。
讓我們來看一個關于上述問題的的具體例子。在純 Python 中,您可以這樣創建一個“二維列表”:
清單 1. Python 的嵌套數組
>>> pyarr = [[1,2,3],... [4,5,6],... [7,8,9]]>>> print pyarr[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> pyarr[1][1] = 0>>> print pyarr[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
很好,但是您對這種結構所能做的只是通過單獨的 (或者多維的) 索引來設置和檢索元素。與此相比,Numarray 數組要更靈活:
清單 2. Numerical Python 數組
>>> from numarray import *>>> numarr = array(pyarr)>>> print numarr[[1 2 3] [4 0 6] [7 8 9]]
改變并不大,但是使用 Numarray 進行的操作如何呢? 下面是一個例子:
清單 3. 元素操作
>>> numarr2 = numarr * 2>>> print numarr2[[ 2 4 6] [ 8 0 12] [14 16 18]]>>> print numarr2 + numarr[[ 3 6 9] [12 0 18] [21 24 27]]
改變數組的形狀:
清單 4. 改變形狀
>>> numarr2.shape = (9,)>>> print numarr2[ 2 4 6 8 0 12 14 16 18]
Numeric 與 Numarray 之間的區別
總體來看,新的 Numarray 軟件包與早期的 Numeric 是 API 兼容的。不過,開發者基于用戶經驗進行了一些與 Numric 并不兼容的改進。開發者沒有破壞任何依賴于 Numeric 的應用程序,而是開創了一個叫做 Numarray 的新項目。在完成本文時,Numarray 還缺少 Numeric 的一些功能,但是已計劃實現這些功能。
Numarray 所做的一些改進:
新聞熱點
疑難解答