推薦序
Python 理所當然地被視為一種通用的程式語言,非常適合於網站開發、系統管理以及通用的業務應用程式。它為諸如YouTube 這樣的網站系統、Red Hat 作業系統中不可或缺的安裝工具以及從雲端管理到投資銀行等大型企業的IT 系統提供技術支援,進一步贏得了如此高的聲譽。Python 還在科學計算領域建立了牢固的基礎,覆蓋了從石油勘探的地震資料處理到量子物理等範圍廣泛的應用場景。Python 這種廣泛的適用性在於,這些看似不同的應用領域通常在某些重要的方面是重疊的。易於與資料庫連接、在網路上發佈資訊並高效率地進行複雜計算的應用程式,對於許多企業是非常重要的,而Python 最主要的長處就在於它能讓開發者迅速地建立這樣的工具。
實際上,Python 與科學計算的關係源遠流長。吉多• 范羅蘇姆建立這門語言,還是他在荷蘭阿姆斯特丹的國家數學和電腦科學研究學會(CWI) 的時候。當時只是作為「課餘」的開發,但是很快其他人也開始為之做出貢獻。從1994 年開始的頭幾次Python 研討會,都是在大洋彼岸的科學研究機構舉行的。例如國家標準技術研究所(NIST)、美國地質學會以及勞倫斯利福莫爾國家實驗室(LLNL),所有這些都是以科學研究為中心的機構。當時Python 1.0 剛剛發佈,與會者們就已經開始打造Python 的數學計算工具。10 多年過去了,我們欣喜地看到,我們在開發具有驚人能力的工具集以及建設多彩的社區方面做出了如此多的成績。就我所知,第一本涵蓋了Python 的主要科學計算工具的綜合性著作,在另一個海洋之遙的中國編著並出版了。展望今後的十幾年,我迫不及待地想看到我們能共同建立出怎樣的未來。
吉多他本人並不是科學家或工程師。他在CWI 的電腦科學部門時,為了緩解為阿米巴(Amoeba) 作業系統建立系統管理工具的痛苦,他建立了Python。當時那些系統管理工具都是用C 語言撰寫的。於是Python 就成了填補shell 指令稿和C 語言之間空白的工具。作業系統工具與計算反矩陣或快速傅立葉轉換是完全不同的領域,但是從Python 誕生開始,世界各地的許多科學家就成了它最早期的採用者。吉多成功地建立了一種能與他們的C 和Fortran 程式完美結合的、具有優雅表現力的程式語言。並且,吉多是一位願意聽取建議並增加關鍵功能的語言設計師,例如支援複數就是專門針對科學領域的。隨著NumPy 的前身——Numeric 的誕生,Python 獲得了一個高效且強大的數值運算工具,它加強了在未來幾十年中,Python 作為領先的科學計算語言的地位。
對一些人來說,「科學計算程式設計」會讓人聯想起Numerical Recipes in C 中描述的那些複雜演算法,或是研究所學生們在深夜中努力打造程式的場景。但是真實情況所涵蓋的範圍更廣泛——從底層的演算法設計到具有進階繪圖功能的使用者介面開發。而後者的重要性卻常常被忽視了。幸運的是在本書中,作者為我們介紹了科學計算程式設計所需的各方面。從NumPy 函數庫和SciPy 演算法工具函數庫的基礎開始,介紹了任何科學計算應用程式所需的基本工具。然後,本書很適時地介紹了二維繪圖以及3D 視覺化函數庫——matplotlib、Chaco、Mayavi。用Traits 和TraitsUI 進行應用程式和介面開發, 以及用Cython、Weave、ctypes 和SWIG 等與傳統的C 語言函數庫相互結合等內容在書中也有很好的介紹。除了這些核心的工具之外,本書還介紹了使用SymPy 進行數學符號運算以及其他的各種有用的主題。
所有這些主題都被組合語言到一本書中真是一件令人欣喜的事情。本書所提供的整合式服務,能夠指導讀者從最初的入門直到建立一個漂亮的、全功能的分析與模擬應用程式。
Eric Jones