可愛的Python: Numerical Python

來源:互聯網
上載者:User

Numerical Python (通常稱為 NumPy) 是一個廣為應用的 Python 擴充庫,用於快速處理任意維數的固定類型數組。由於底層代碼是充分最佳化的 C 語言代碼,因而對數組的主要操作在 NumPy 調用中執行時,速度不再受到 Python 解譯器的限制。因為 NumPy 已經取得了這樣的成功,所以 NumPy 的開發人員將用一個叫做 Numarray 的新模組來取代 NumPy,新模組基本上 (但並不是完全) 與 NumPy 相容。在本文中,David 介紹了 NumPy 的一般功能,以及 Numarray 將要帶來的一些特殊改進。

要瞭解 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]]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.