作者 J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/
最新版本的 IPython notebook
課程文件 http://github.com/jrjohansson/scientific-python-lectures.
作者其他的 notebook http://jrjohansson.github.com.
一、實驗說明
本課主要介紹科學計算,實驗環境的安裝以及使用等內容。
1. 環境登錄
無需密碼自動登錄,系統用戶名shiyanlou
2. 環境介紹
本實驗環境采用帶桌面的Ubuntu Linux環境,實驗中會用到桌面上的程序:
- Spyder : Spyder 是一個類 MATLAB IDE 專注於科學計算的 Python IDE。
3. 環境使用
代碼編寫與命令運行都會在 Spyder IDE 上進行。
實驗報告可以在個人主頁中查看,其中含有每次實驗的截圖及筆記,以及每次實驗的有效學習時間(指的是在實驗桌面內操作的時間,如果沒有操作,系統會記錄為發呆時間)。這些都是您學習的真實性證明。
二、實驗內容
計算在科學中所扮演的角色
傳統意義上科學被分為兩類:經驗科學與理論科學,但在過去的幾十年中計算漸漸成為了科學重要的一部分。科學計算在接近理論的同時又包含很多實驗工作的特性,因此常常被看作是科學的第三分支。在大多數領域中,計算工作是對經驗與理論的一個重要補充,現今大量的論文都包含了數值計算,計算機模擬和建模。
在經驗科學與理論科學的領域中已經建立起了完善的規則使得研究結果可以被獲取。而在計算機科學中卻沒有好的指導規范規定源代碼與數據必須發布,最近這個議題越來越受到人們的關注,一些著名的期刊,包括科學,都在呼吁論文作者提供處理數據的源代碼,這場關於如何促進源代碼分發的討論將持續進行。
引用
-
Reproducible Research in Computational Science, Roger D. Peng, Science 334, 1226 (2011).
-
Shining Light into Black Boxes, A. Morin et al., Science 336, 159-160 (2012).
-
The case for open computer programs, D.C. Ince, Nature 482, 485 (2012).
科學計算的要求
可復制 與 可重現 是科學方法的兩塊基石。對於數值工作,遵守這些概念有以下兩點實際意義:
-
可復制:有需要時論文作者能夠重新模擬一次並且復制結果,其他科學家在進行相同的計算后應當能得到同樣的結果。
-
可重現:數值模擬所得到的結果可以由方法的獨立實現來重現,或者是完全不同的方法來重現。
結論:一個可靠的科學結果應當是可重現的, 一個可靠的科學研究應當是可復制的。
為了實現這些目標,我們需要:
-
准確地記錄下產生論文數據與圖表的源代碼及其版本號。
-
記錄下所使用的軟件的版本號等信息,確保實驗環境是能夠還原的。
-
確保舊代碼與筆記已經備份,為以后可能的引用做准備
-
在理想情況下將源代碼發布到線上,使其它對其感興趣的科學家能很容易得到它。
管理源代碼的工具
保證科學模擬的可復制與可重現是一個麻煩的工作,不過有很多好的工具能幫到你:
-
版本控制系統 (RCS) 軟件:
- git - http://git-scm.com
- mercurial - http://mercurial.selenic.com 也就是
hg
- subversion - http://subversion.apache.org 也就是
svn
-
線上源代碼倉庫:
- Github - http://www.github.com
- Bitbucket - http://www.bitbucket.com
為什么Python適合科學計算?
-
Python 在科學計算中有着重要地位:
- 大量的社區用戶, 易於尋求幫助與查詢文檔。
-
在科學計算庫方面有着近乎完美的生態系統:
- numpy: http://numpy.scipy.org - Numerical Python
- scipy: http://www.scipy.org - Scientific Python
- matplotlib: http://www.matplotlib.org - graphics library
-
極佳的性能 —— 集成了用 C 與 Fortran 寫的經過高度優化的代碼:
- blas, altas blas, lapack, arpack, Intel MKL, ...
-
良好的支持
- 多進程多線程平行計算
- 進程間通信 (MPI)
- GPU 計算 (OpenCL 與 CUDA)
-
容易獲取,適合高性能計算機集群。
-
不需要許可證費用。
科學 Python 軟件棧
Python 環境
這里介紹幾種科學計算會使用到的 python 環境
IPython
IPython是一種基於Python的交互式解釋器。相較於原生的Python Shell,IPython提供了更為強大的編輯和交互功能。
IPython 的特性包括:
- 命令歷史記錄
- Tab 自動補全
- 對象自省,自動提取對象的文檔內容
- 與操作系統 shell 有良好的交互
- 支持后端多平行線程,可以運行在計算集群或者雲服務上
IPython notebook
IPython notebook是一個基於HTML的 notebook 環境 , 類似於 Mathematica 或者 Maple。
盡管使用web瀏覽器作為圖形接口,IPython notebooks 一般都在本地運行,要開啟一個新的 IPython notebook,可以運行以下命令:
$ ipython notebook <directory>
Spyder
Spyder 是一個類 MATLAB IDE 的 Python IDE。 它擁有傳統IDE環境所擁有的的優點。
Spyder 的優點:
- 強大的代碼編輯器,動態代碼自省,內集成 python 調試器。
- 變量瀏覽器,IPython 命令行終端。
- 集成了文檔與幫助。
Python的版本
Python 有兩個版本:Python2 與 Python3。Python3 最終會取代 Python2, 但它並沒有兼容 Python2, 大量現存的 python 代碼與包是用 Python2 寫的,它也仍然是最廣泛使用的版本。不過在本實驗中,Python2 或是Python3都是可以的。 輸入以下命令查看 Python 版本:
$ python --version
Python 2.7.3 $ python3.2 --version Python 3.2.3
安裝
Linux
在 Ubuntu Linux 中安裝科學計算所用的工具:
$ sudo apt-get install python ipython ipython-notebook $ sudo apt-get install python-numpy python-scipy python-matplotlib python-sympy $ sudo apt-get install spyder
Windows
Windows 缺乏一個好的包管理系統,所以搭建一個 Python 環境最簡單的方法就是安裝一個科學計算發行版:
- Enthought Python Distribution. EPD 是商業產品,不過如果是為了學術目的則可以免費獲取。
- Anaconda CE. Anaconda Pro 是商業產品, 不過 Anaconda 社區版是免費的。
- Python(x,y). 開源。
延伸閱讀
- Python. 官方 Python 網站。
- Python tutorials. 官方 Python 教程。
- Think Python. 免費的 Python 書籍。
Python 與 模塊版本
既然有不同版本的 Python 且每個 Python包有自己的發布周期與版本號,那么就需要記錄下所有不同軟件包的版本號為了能夠重現 IPython notebook,保證 notebook 中的代碼運行結果是一致的。 為了鼓勵記錄版本號這一行為,作者寫了一個 IPython 擴展,能夠幫助生成版本號表格,使用步驟如下:
安裝 IPython 擴展,運行:
# you only need to do this once %install_ext http://raw.github.com/jrjohansson/version_information/master/version_information.py Installed version_information.py. To use it, type: %load_ext version_information
運行下列代碼生成版本表格:
%load_ext version_information
%version_information numpy, scipy, matplotlib, sympy
License
本作品在 知識共享許可協議3.0 下許可授權。