# 軟件包的安裝和介紹
## 安裝軟件包
### 安裝
和Matlab不同,Python的科學軟件包由眾多的社區維護和發布,因此要一一將其收集齊安裝到你的電腦里是一件很費時間的事情。幸好這些工作已經有人幫我們整理好了。只需要下載一個文件,一次安裝就能擁有眾多的函數庫可供使用。
這里介紹兩個科學計算Python合集的下載和安裝過程。
#### Python(x,y)
[http://www.pythonxy.com](http://www.pythonxy.com) 發布的Python(x,y)將近400M,收集了眾多的函數庫以及文檔、教程。并且提供了一個方便的啟動界面:

Python(x,y)的啟動畫面
* Shortcuts:啟動各種應用程序
* Documentation:打開各個軟件包的文檔
* About:查看所安裝的程序庫的版本信息
#### Enthought Python Distribution (EPD)
下載地址:http://www.enthought.com/products/getepd.php EPD是一個商業的Python發行版本,同樣包括了眾多的科學軟件包,而且作為教學使用是免費的,大小約為250M。
### 工具
安裝好了之后先看看下面這些常用的工具,在以后的學習過程中會經常用到。
#### iPython
ipython 是一個 python 的交互式 shell,比默認的 python shell 好用得多,支持變量自動補全,自動縮近,支持 bash shell 命令,內置了許多很有用的功能和函數。
如果你安裝了Python(x,y)的話,可以從Python(x,y)的啟動界面中運行iPython。

通過Python(x,y) Home啟動IPython的各種選項
從下拉選擇框中選擇你想運行的iPython,然后點擊后面的①或者②按鈕啟動iPython。下拉選擇框中的IPython(x,y)、IPython(Qt)、IPython(wxPython)和IPython(mlab)等幾個選項都是啟動iPython,只不過它們的啟動方式不同。而Python選項則只啟動單純的Python Shell。
| 選項 | 參數 | 含義 |
| --- | --- | --- |
| IPython(x,y) | -pylab -p xy |
| IPython(Qt) | -q4thread |
| IPython(wxPython) | -wthread |
| IPython(mlab) | -wthread |
點擊①按鈕將用一個叫做Console的軟件啟動Shell,此軟件在窗口中顯示Shell,并且支持多標簽。點擊②按鈕用Windows自帶的Cmd啟動Shell。
如果你用python(x,y)的啟動界面通過IPython(x,y)運行iPython的話,那么在iPython打開之后自動運行一個default.py腳本。此腳本缺省執行以下的函數庫導入:
```
import numpy
import scipy
from numpy import *
```
為了和numpy, scipy等社區的推薦的標準導入方式一致,請點擊按鈕③,然后在打開的文件夾中添加一個名為numpy.py的文件,編輯此文件,添加以下幾行推薦的導入:
```
import numpy as np
import scipy as sp
import pylab as pl
```
此后運行IPython(x,y)的時候請記著要選擇numpy.py為啟動腳本。
如果要使用pylab,TraitsUI等在shell中和圖形界面進行交互的話,需要選擇帶-wthread參數的選項(-pylab也可以)。[下圖](#fig-ipythonsample)是一個用pylab繪制sin波形圖的例子:

使用IPython交互式地繪制正弦波
在iPython的交互中可以方便地使用如下功能:
* 自動補全:輸入一部分文字之后按tab鍵,iPython將列出所有以輸入補全信息。
* 查看文檔:輸入需要查看文檔的函數,然后在后面添加?或者??,?表示查看函數的文檔,??表示查看其Python源代碼,如果函數不是Python寫的,則查看不到。
* 執行cmd命令:ls-列出當前目錄下的所有文件,cd-顯示或者更改當前路徑
* 執行Python程序:用run [*](#id5).py命令,在IPython中運行指定的py文件。如果加-i參數的話,則在IPython的命名空間中執行。也就是說在文件中沒有定義名稱會直接使用在IPython中的。
* 執行剪切板中的程序:你可以從本書中復制代碼,然后在IPython命令窗口中執行paste命令運行復制的代碼。如果執行paste foo的話,將把剪切板中的內容復制到變量foo中。變量foo是一個IPython提供的SList列表類型,它提供了很多操作所復制的內容的方法。
* 執行系統命令:在要執行的系統名字之前添加一個!號。例如執行!test.py的話,那么將讓系統運行test.py文件。和run命令不同的是,test.py完全在另外的進程中運行。
#### spyder
spyder是Python(x,y)的作者為它開發的一個簡單的Python開發環境。和其它Python IDE相比它最大的優點就是模仿MATLAB的workspace功能,可以很方便地觀察和修改數組的值。
spyder的項目地址: [http://code.google.com/p/spyderlib](http://code.google.com/p/spyderlib)
[下圖](#fig-spyder01)是spyder的界面截圖:

在Spyder中執行圖像處理的程序
[下圖](#fig-spyder02)是Workspace的截圖,列出了其中的變量名以及類型和大小等信息。鼠標右鍵可以顯示出操作指定變量的菜單:
Warning
Workspace缺省配置不顯示大寫字母開頭的變量,可以在Workspace菜單中修改這項配置。

使用Workspace查看變量內容
選擇Plot選項,將出現如[下圖](#fig-spyder03)所示的繪圖窗口:

在Workspace中將數組繪制成曲線圖
如果Edit選項的話,將出現如[下圖](#fig-spyder04)所示的編輯器對數組進行操作:

使用數組編輯器查看和編輯數組內容
## 函數庫介紹
Python的科學計算方面的內容由許多庫構成,在基礎篇中讓我們首先來了解一下編寫科學計算軟件時經常使用的一些庫。
### 數值計算庫
**NumPy**為Python提供了快速的多維數組處理的能力,而**SciPy**則在NumPy基礎上添加了眾多的科學計算所需的各種工具包,有了這兩個庫,Python就有幾乎和Matlab一樣的處理數據和計算的能力了。
NumPy和SciPy官方網址: [http://www.scipy.org](http://www.scipy.org)
NumPy為Python帶來了真正的多維數組功能,并且提供了豐富的函數庫處理這些數組。它將常用的數學函數都進行數組化,使得這些數學函數能夠直接對數組進行操作,將本來需要在Python級別進行的循環,放到C語言的運算中,明顯地提高了程序的運算速度。
SciPy的核心計算部分都是一些久經考驗的Fortran數值計算庫,例如:
* 線性代數使用LAPACK庫
* 快速傅立葉變換使用FFTPACK庫
* 常微分方程求解使用ODEPACK庫
* 非線性方程組求解以及最小值求解等使用MINPACK庫
### 符號計算庫
**SymPy**是一套進行符號數學運算的Python函數庫,雖然它目前還沒有到達1.0版本,但是已經足夠好用,可以幫助我們進行公式推導,進行符號求解。
SymPy官方網址: [http://code.google.com/p/sympy](http://code.google.com/p/sympy)
### 界面設計
制作界面一直都是一件十分復雜的工作,使用**Traits**庫,你將再也不會在界面設計上耗費大量精力,從而能把注意力集中到如何處理數據上去。
Traits官方網址: [http://code.enthought.com/projects/traits](http://code.enthought.com/projects/traits)
Traits庫分為Traits和TraitsUI兩大部分,Traits為Python添加了類型定義的功能,使用它定義的traits屬性具有初始化、校驗、代理、事件等諸多功能。
TraitsUI庫基于Traits庫,使用MVC結構快速地定義用戶界面,在最簡單的情況下,你甚至不需要寫一句關于界面的代碼,就可以通過traits屬性定義獲得一個可以工作的用戶界面。使用TraitsUI庫編寫的程序自動支持wxPython和pyQt兩個經典的界面庫。
### 繪圖與可視化
**Chaco**和**matplotlib**是很優秀的2D繪圖庫,Chaco庫和Traits庫緊密相連,方便制作動態交互式的圖表功能。而matplotlib庫則能夠快速地繪制精美的圖表、以多種格式輸出,并且帶有簡單的3D繪圖的功能。
Chaco官方網址: [http://code.enthought.com/projects/chaco](http://code.enthought.com/projects/chaco)
matplotlib官方網址: [http://matplotlib.sourceforge.net](http://matplotlib.sourceforge.net)
**TVTK**庫在標準的VTK庫之上用Traits庫進行封裝,如果要在Python下使用VTK,用TVTK是再好不過的選擇。**Mayavi2**則在TVTK的基礎上再添加了一套面向應用的方便工具,它既可以單獨作為3D可視化程序使用,也可以快速地嵌入到用戶的程序中去。
Mayavi2官方網址: [http://code.enthought.com/projects/mayavi](http://code.enthought.com/projects/mayavi)
VTK(Visualization Toolkit)
視覺化工具函式庫(VTK, Visualization Toolkit)是一個開放源碼,跨平臺、支援平行處理(VTK曾用于處理大小近乎1個Petabyte的資料,其平臺為美國Los Alamos國家實驗室所有的具1024個處理器之大型系統)的圖形應用函式庫。2005年實曾被美國陸軍研究實驗室用于即時模擬俄羅斯制反導彈戰車ZSU23-4受到平面波攻擊的情形,其計算節點高達2.5兆個之多。 -- 摘自維基百科
此外,使用**Visual**庫能夠快速、方便地制作3D動畫演示,使你的數據結果更有說服力。
Visual官方網址: [http://vpython.org](http://vpython.org)
### 圖像處理和計算機視覺
**OpenCV**是由英特爾公司發起并參與開發,以BSD許可證授權發行,可以在商業和研究領域中免費使用。OpenCV可用于開發實時的圖像處理、計算機視覺以及模式識別程序。OpenCV提供的Python API方便我們快速實現算法,查看結果并且和其它的庫進行數據交換。
- 用Python做科學計算
- 軟件包的安裝和介紹
- NumPy-快速處理數據
- SciPy-數值計算庫
- matplotlib-繪制精美的圖表
- Traits-為Python添加類型定義
- TraitsUI-輕松制作用戶界面
- Chaco-交互式圖表
- TVTK-三維可視化數據
- Mayavi-更方便的可視化
- Visual-制作3D演示動畫
- OpenCV-圖像處理和計算機視覺
- Traits使用手冊
- 定義Traits
- Trait事件處理
- 設計自己的Trait編輯器
- Visual使用手冊
- 場景窗口
- 聲音的輸入輸出
- 數字信號系統
- FFT演示程序
- 頻域信號處理
- Ctypes和NumPy
- 自適應濾波器和NLMS模擬
- 單擺和雙擺模擬
- 分形與混沌
- 關于本書的編寫
- 最近更新
- 源程序集
- 三角波的FFT演示
- 在traitsUI中使用的matplotlib控件
- CSV文件數據圖形化工具
- NLMS算法的模擬測試
- 三維標量場觀察器
- 頻譜泄漏和hann窗
- FFT卷積的速度比較
- 二次均衡器設計
- 單擺擺動周期的計算
- 雙擺系統的動畫模擬
- 繪制Mandelbrot集合
- 迭代函數系統的分形
- 繪制L-System的分形圖