●第1章公式的計算1
1.1編程計算:第一個公式1
1.1.1用程序作計算器1
1.1.2程序和編程2
1.1.3編寫程序的工具2
1.1.4第一個Python程序3
1.1.5輸入程序文本時的警告3
1.1.6驗證結果4
1.1.7變量4
1.1.8變量名4
1.1.9Python中的保留字5
1.1.10注釋5
1.1.11指定文字和數字的輸出格式6
1.2計算機專業術語9
1.3計算另一個公式:攝氏度與華氏度的轉換12
1.3.1容易被忽略的錯誤:整數除法12
1.3.2Python中的對像13
1.3.3避免整數除法14
1.3.4算術運算符和優先級15
1.4求標準數學函數的值15
1.4.1示例:使用平方根函數15
1.4.2示例:計算sinhx17
1.4.3初窺舍入誤差17
1.5交互式計算18
1.5.1使用Pythonshell18
1.5.2類型轉換19
1.5.3IPython20
1.6復數23
1.6.1Python中的復數運算23
1.6.2Python中的復函數24
1.6.3實數函數與復數函數的統一處理25
1.7符號計算26
1.7.1基本的微分和積分26
1.7.2方程求解27
1.7.3泰勒級數和其他28
1.8本章小結28
1.8.1本章主題28
1.8.2示例:球的軌跡31
1.8.3關於本書中的排版約定32
1.9習題33
第2章循環與列表41
2.1while循環41
2.1.1最直接的方法41
2.1.2while循環42
2.1.3布爾表達式43
2.1.4示例:累加求和45
2.2列表46
2.2.1列表的基本操作46
2.2.2for循環48
2.3列表和循環的替代實現50
2.3.1用while循環實現for循環50
2.3.2Range結構50
2.3.3用for循環對列表索引進行迭代51
2.3.4修素52
2.3.5列表推導式53
2.3.6同時遍歷多個列表53
2.4嵌套列表54
2.4.1表格:“行”或“列”構成的列表54
2.4.2打印對像55
2.4.3提取子列表56
2.4.4遍歷嵌套列表58
組60
2.6本章小結61
2.6.1本章主題61
2.6.2示例:分析列表數據64
2.6.3如何找到更多的Python信息66
2.7習題67
第3章函數與分支74
3.1函數74
3.1.1數學函數作為Python函數74
3.1.2了解程序執行過程75
3.1.3局部變量和全局變量76
3.1.4多參數78
3.1.5使用函數參數還是全局變量79
3.1.6非數學函數79
3.1.7返回多個值80
3.1.8求和81
3.1.9無返回值82
3.1.10關鍵字參數84
3.1.11文檔字符串85
3.1.12函數作為函數的參數87
3.1.13主程序89
3.1.14lambda函數89
3.2分支90
3.2.1if-else語句90
3.2.2內嵌if語句92
3.3混合循環、分支、函數的生物信息學應用示例93
3.3.1DNA字符串中的字母計數93
3.3.2效率評估96
3.3.3驗證實現98
3.4本章小結99
3.4.1本章主題99
3.4.2示例:數值積分100
3.5習題104
第4章用戶輸入和錯誤管理120
4.1提出問題和讀入應答120
4.2從命令行讀取121
4.2.1在命令行上提供輸入121
4.2.2可變數量的命令行參數122
4.2.3關於命令行參數的進一步理解123
4.3將用戶文本轉換為活躍對像123
4.3.1神奇的eval函數124
4.3.2神奇的exec函數127
4.3.3將字符串表達式轉換為函數129
4.4命令行上的參數名-值對130
4.4.1argparse模塊的基本用法130
4.4.2將數學表達式作為值131
4.5從文件中讀取數據133
4.5.1逐行讀取文件134
4.5.2其他讀取文件的方法135
4.5.3讀取文本和數字的混合文件137
4.6將數據寫入文件138
4.6.1示例:將表格寫入文件139
4.6.2標準輸入和輸出作為文件對像140
4.6.3文件到底是什麼142
4.7錯誤處理144
4.7.1異常處理145
4.7.2產生異常148
4.8圖形化的用戶界面150
4.9制作模塊151
4.9.1示例:銀行存款利息152
4.9.2將函數收集在模塊文件中153
4.9.3測試塊153
4.9.4驗證模塊代碼155
4.9.5獲取輸入數據156
4.9.6模塊中的文檔字符串158
4.9.7使用模塊158
4.9.8發布模塊161
4.9.9使軟件在互聯網上可用161
4.10Python2和Python3的代碼162
4.10.1Python2和Python3的基本差異162
4.10.2將Python2代碼轉換為Python3代碼163
4.11本章小結165
4.11.1本章主題165
4.11.2示例:二分查找168
4.12習題175第5章數組計算和曲線繪圖182
5.1向量182
5.1.1向量的概念182
5.1.2向量的數學運算183
5.1.3向量算術和向量函數184
5.2Python程序中的數組185
5.2.1用列表來收集函數數據185
5.2.2NumericalPython的數組基礎186
5.2.3計算坐標和函數值187
5.2.4向量化188
5.3繪制函數曲線190
5.3.1用Matplotlib實現MATLAB風格的繪圖190
5.3.2Matplotlib和Pyplot前綴194
5.3.3SciTools和Easyviz195
5.3.4制作動畫200
5.3.5制作視頻204
5.3.6用文本字符繪制曲線205
5.4繪制高難度函數206
5.4.1分段定義函數206
5.4.2快速變化函數208
5.5更高級的函數向量化209
5.5.1StringFunction對像向量化209
5.5.2Heaviside函數向量化210
5.5.3帽狀函數向量化213
5.6NumericalPython數組深入剖析215
5.6.1復制數組215
5.6.2原地運算216
5.6.3數組分配217
5.6.4廣義索引217
5.6.5數組類型檢測218
5.6.6數組生成的緊湊語法219
5.6.7形狀操作219
5.7數組的高性能計算219
5.7.1標量實現方式220
5.7.2向量化實現方式221
5.7.3內存的實現方式221
5.7.4內存使用分析222
5.7.5CPU時間分析223
5.8高維數組224
5.8.1矩陣與數組224
5.8.2Python的二維數值數組225
5.8.3數組計算228
5.8.4矩陣對像228
5.9一些常見的線性代數運算229
5.9.1逆、行列式和特征值229
5.9.2乘積230
5.9.3範數230
5.9.4和與極值230
5.9.5索引232
5.9.6轉置和上/下三角部分232
5.9.7求解線性方程組233
5.9.8矩陣的行列操作233
5.9.9計算矩陣的秩234
5.9.10符號化線性代數235
5.10繪制標量和向量場237
5.10.1安裝237
5.10.2曲面繪圖238
5.10.3參數化曲線239
5.10.4等高線239
5.10.5梯度向量場240
5.11Matplotlib240
5.11.1曲面繪圖241
5.11.2等高線繪圖241
5.11.3向量場繪圖243
5.12Mayavi243
5.12.1曲面繪圖244
5.12.2等高線繪圖245
5.12.3向量場繪圖247
5.12.4一個3D標量場及其梯度場247
5.12.5動畫249
5.13本章小結249
5.13.1本章主題249
5.13.2示例:動畫函數251
5.14習題254
第6章字典與字符串269
6.1字典269
6.1.1創建字典269
6.1.2字典操作270
6.1.3示例:多項式作為字典271
6.1.4具有默認值和排序的字典273
6.1.5示例:在字典中存儲文件數據276
6.1.6示例:在嵌套字典中存儲文件數據277
6.1.7示例:讀取和繪制在特定日期記錄的數據281
6.2字符串285
6.2.1字符串常見操作285
6.2.2示例:讀取數值對289
6.2.3示例:讀取坐標292
6.3從網頁讀取數據294
6.3.1關於網頁294
6.3.2如何編程訪問網頁295
6.3.3示例:讀取純文本文件296
6.3.4示例:從HTML提取數據298
6.3.5處理非英文文本298
6.4讀寫電子表格文件301
6.4.1CSV文件301
6.4.2讀取CSV文件302
6.4.3處理電子表格數據303
6.4.4寫入CSV文件303
6.4.5用NumericalPython數組表示格304
6.4.6使用更高級的NumericalPython功能305
6.5分析DNA的示例306
6.5.1計算頻率306
6.5.2分析頻率矩陣313
6.5.3尋找堿基頻率315
6.5.4將基因轉換成蛋白質318
6.5.5有的人可以喝牛奶,而有的人則不能323
6.6編寫兼容Python2和Python3的代碼324
6.6.1Python2和Python3之間更多的差異324
6.6.2將Python2代碼轉換成Python3代碼325
6.7本章小結325
6.7.1本章主題325
6.7.2示例:文件數據庫328
6.8習題331
第7章Python類簡介337
7.1簡單函數類337
7.1.1挑戰:帶參數的函數337
7.1.2將函數表示為類339
7.1.3self變量343
7.1.4另一個函數類的例子344
7.1.5另一種函數類的實現345
7.1.6無構造方法的類347
7.1.7閉包349
7.2更多關於類的例子350
7.2.1銀行賬戶350
7.2.2電話簿352
7.2.3圓354
7.3特殊方法355
7.3.1call特殊方法355
7.3.2示例:Automagic差分356
7.3.3示例:Automagic積分360
7.3.4將實例轉換為字符串362
7.3.5使用特殊方法的電話簿363
7.3.6支持加法的對像364
7.3.7示例:多項式的類364
7.3.8多項式的精美打印367
7.3.9算術運算和其他特殊方法369
7.3.10字符串轉換的特殊方法369
7.4示例:平面中向量的類371
7.4.1對向量的一些數學運算371
7.4.2實現371
7.4.3用法373
7.5示例:復數類374
7.5.1實現374
7.5.2非法操作376
7.5.3復數與實數混合運算376
7.5.4動態類型、靜態類型、強類型、弱類型和Duck類型377
7.5.5應用於右操作數的特殊方法378
7.5.6檢查實例379
7.6靜態方法和屬性380
7.7本章小結381
7.7.1本章主題381
7.7.2示例:區間運算383
7.8習題387
第8章隨機數和簡單的遊戲401
8.1生成隨機數401
8.1.1種子401
8.1.2均勻分布的隨機數402
8.1.3可視化分布情況402
8.1.4隨機數生成的向量化403
8.1.5計算平均值和標準差404
8.1.6高斯或正態分布406
8.2生成整數407
8.2.1隨機整數函數407
8.2.2示例:投擲骰子408
8.2.3根據列表生成隨機數410
8.2.4示例:從整副牌中選牌411
8.2.5示例:牌的類實現413
8.3計算概率416
8.3.1蒙特卡羅模擬的原理416
8.3.2示例:投擲骰子416
8.3.3示例:從帽子中取球419
8.3.4基因的隨機變異421
8.3.5示例:人口增長的政策426
8.4簡單遊戲428
8.4.1猜數字428
8.4.2擲兩個骰子429
8.5蒙特卡羅積分432
8.5.1蒙特卡羅積分的推導432
8.5.2標準蒙特卡羅積分的實現433
8.5.3通過隨機點來計算區域面積437
8.6單維度的隨機遊走438
8.6.1基本實現438
8.6.2可視化439
8.6.3以差分方程表示隨機遊走439
8.6.4計算粒子位置的統計量440
8.6.5向量化實現440
8.7兩維度的隨機遊走442
8.7.1基本實現442
8.7.2向量化實現443
8.8本章小結444
8.8.1本章主題444
8.8.2示例:隨機增長446
8.9習題451
第9章面向對像編程463
9.1繼承與類層次463
9.1.1Line類463
9.1.2初試Parabola類464
9.1.3使用繼承的Parabola類464
9.1.4檢查類之類型466
9.1.5屬性與繼承:has-a與is-a關繫467
9.1.6將超類作為接口468
9.2數值微分類470
9.2.1計算微分的類470
9.2.2驗證472
9.2.3構建靈活的主程序474
9.2.4擴展475
9.2.5基於函數的實現478
9.2.6基於函數式編程的實現478
9.2.7由單個類實現的數值微分方法479
9.3數值積分類481
9.3.1數值積分方法481
9.3.2用於積分的類481
9.3.3驗證485
9.3.4使用類層次486
9.3.5關於面向對像編程488
9.4用於繪圖的類489
9.4.1使用對像集合489
9.4.2幾何對像的類的例子497
9.4.3通過遞歸增強功能501
9.4.4對圖形進行縮放、平移和旋轉504
9.5用於DNA分析的類506
9.5.1表示區域的類506
9.5.2表示Gene的類507
9.5.3子類512
9.6本章小結513
9.6.1本章主題513
9.6.2示例:輸入數據讀取器514
9.7習題519
附錄A數列和差分方程526
A.1用差分方程構建數學模型526
A.1.1利息計算527
A.1.2用差分方程處理階乘問題529
A.1.3斐波那契數529
A.1.4生物群體的增長531
A.1.5邏輯增長531
A.1.6償還貸款532
A.1.7使用差分方程來求積分533
A.1.8使用差分方程計算泰勒級數535
A.1.9投資與生活536
A.1.10牛頓迭代法537
A.1.11反函數539
A.2對聲音編程541
A.2.1將聲音寫入文件542
A.2.2從文件讀取聲音542
A.2.3播放多個單音543
A.2.4數列產生的音樂544
A.3習題546
附錄B離散微積分簡介555
B.1離散函數555
B.1.1正弦函數555
B.1.2插值557
B.1.3求近似值557
B.1.4概括558
B.2用有限差分來實現微分559
B.2.1正弦函數微分559
B.2.2網格上的差分560
B.2.3歸納561
B.3用求和實現積分562
B.3.1子區間劃分563
B.3.2子區間積分564
B.3.3子區間求和564
B.3.4歸納565
B.4泰勒級數567
B.4.1函數在某一點附近的近似值567
B.4.2指數函數近似567
B.4.3更高精度的展開567
B.4.4近似的精度569
B.4.5再論導數571
B.4.6更準確的差分近似572
B.4.7二階導數574
B.5習題576
附錄C微分方程計算簡介579
C.1入門案例579
C.2指數增長581
C.3邏輯增長585
C.4單擺585
C.5疾病傳播模型588
C.6習題589
附錄D一個完整的微分方程工程591
D.1問題描述:物理中的運動和力591
D.1.1物理問題591
D.1.2求解算法592
D.1.3數學模型推導592
D.1.4算法推導594
D.2程序編寫及測試594
D.2.1算法實現594
D.2.2回調函數597
D.2.3制作模塊599
D.2.4驗證600
D.3可視化602
D.3.1同步計算及繪圖602
D.3.2若干應用604
D.3.3關於Δt的選取606
D.3.4在子圖中對若干量進行比較606
D.3.5比較近似解與準確解607
D.3.6誤差隨Δt減小而變化的情況608
D.4習題610
附錄E編程求解微分方程612
E.1標量常微分方程612
E.1.1右手邊函數示例613
E.1.2前向歐拉方法613
E.1.3函數實現614
E.1.4驗證實現615
E.1.5從離散解到連續解616
E.1.6轉換數值方法617
E.1.7類實現方式617
E.1.8邏輯增長的函數方法實現621
E.1.9邏輯增長的類方法實現622
E.2常微分方程組624
E.2.1數學問題624
E.2.2常微分方程組示例625
E.2.3函數實現626
E.2.4類實現628
E.3ODESolver類層次結構629
E.3.1數值方法629
E.3.2求解器層次結構的構造630
E.3.3後向歐拉方法633
E.3.4驗證635
E.3.5示例:指數衰減636
E.3.6示例:具有問題類和求解器類的Logistic方程638
E.3.7示例:振蕩繫統645
E.3.8應用:球的軌跡647
E.3.9ODESolver的進一步開發649
E.4習題649
附錄F調試672
F.1使用調試器672
F.2如何調試675
F.2.1程序編寫和調試的方法675
F.2.2應用實例677
F.2.3從代碼分析器獲取幫助688
附錄G提高Python運行效率的技術690
G.1用Python編寫蒙特卡羅模擬的代碼690
G.1.1計算問題690
G.1.2Python實現的標量版本690
G.1.3Python實現的向量化版本691
G.2將標量Python代碼移植到Cython692
G.2.1最直接的Cython實現692
G.2.2改良的Cython實現695
G.3將Python/Cython代碼移植到C代碼中697
G.3.1編寫C程序697
G.3.2通過f2py將循環移植到C代碼中697
G.3.3通過Cython將循環移植到C代碼中699
G.3.4效率比較699
附錄H技術主題701
H.1獲取Python701
H.1.1需要的軟件701
H.1.2在MacOSX和Windows平臺上安裝軟件702
H.1.3Anaconda與Spyder702
H.1.4VMWareFusion虛擬機703
H.1.5Windows雙重啟動705
H.1.6Vagrant虛擬機705
H.2如何編寫和運行Python程序706
H.2.1文本編輯器706
H.2.2終端窗口707
H.3Web服務:SageMathCloud與Wakari708
H.3.1SageMathCloud簡介708
H.3.2Wakari簡介708
H.3.3安裝自己的Python包708
H.4IPythonNotebook的使用709
H.4.1啟動IPythonNotebook709
H.4.2混編文本、數學、代碼和圖形709
H.5運行Python程序的不同方式710
H.5.1在IPython中運行Python程序711
H.5.2在UNIX中運行Python程序711
H.5.3在Windows中運行Python程序712
H.5.4在MacOSX中運行Python程序713
H.5.5制作完整的獨立可執行文件713H.6在Python中執行操作繫統命令713
H.7可變數量的函數參數716
H.7.1可變數量的位置參數717
H.7.2可變數量的關鍵字參數719
H.8評估程序執行效率721
H.8.1測量時間721
H.8.2分析Python程序性能722
H.9軟件測試723
H.9.1測試函數需要遵循的約定724
H.9.2編寫測試函數及預先計算數據724
H.9.3編寫測試函數以及獲得準確數值解725
H.9.4測試函數魯棒性726
H.9.5自動執行測試728
參考文獻730