內容簡介
本書詳細介紹Python科學計算中最常用的擴展庫NumPy、SciPy、matplotlib、Pandas、SymPy、TTK、Mayavi、OpenCV、Cython,涉及數值計算、界面制汗趨捉道作、
三維可視化、圖像處理、提高運算效率等多方面的內剃兵榜容。料榜婚刪所附光碟中包含所有章節的Notebook以及攜帶型運行環境WinPython,以方備才便讀者運行書中所有實例。
圖書目錄
第1章 Python科學計算環境的安裝與簡介 1
1.1 Python簡介 1
1.1.1 Python 2還是Python 3 1
1.1.2 開發環境 2
1.1.3 集成開發環境(IDE) 5
1.2 IPython Notebook入門 9
1.2.1 基本詢悼乘操作 10
1.2.2 魔法(Magic)命令 12
1.2.3 Notebook的顯示系統 20
1.2.4 定製IPython Notebook 24
1.3 擴展庫介紹 27
1.3.1 數值計算庫 27
1.3.2 符號計算庫 28
1.3.3 繪圖與可視化 28
1.3.4 數據處理和分析 29
1.3.5 界面設計 30
1.3.6 圖像處理和計算機視覺 31
1.3.7 提高運算速度 31
第2章 NumPy-快速處理數據 33
2.1 ndarray對象 33
2.1.1 創建 34
2.1.2 元素類型 35
2.1.3 自動生成數組 37
2.1.4 存取元素 40
2.1.5 多維數組 43
2.1.6 結構數組 47
2.1.7 記憶體結構 50
2.2 ufunc函式 56
2.2.1 四則運算 58
2.2.2 比較運算和布爾運算 59
2.2.3 自定義ufunc函式 61
2.2.4 廣播 62
2.2.5 ufunc的方法 66
2.3 多維數組的下標存取 68
2.3.1 下標對象 68
2.3.2 整數數組作為下標 70
2.3.3 一個複雜的例子 72
2.3.4 布爾數組作為下標 73
2.4 龐大的函式館 74
2.4.1 隨機數 74
2.4.2 求和、平均值、方差 77
2.4.3 大小與排序 81
2.4.4 統計函式霸放船 86
2.4.5 分段函式 89
2.4.6 操作多維數組 92
2.4.8 多項式函式類 98
2.4.9 各種乘積運算 103
2.4.10 廣義ufunc函式 106
2.5 實用技巧 110
2.5.1 動態數組 110
2.5.2 和其他對象共享記憶體 112
2.5.3 與結構數組共享記憶體 115
第3章 SciPy-數值計算庫 117
3.1 常數和特殊函式 117
3.2 擬合與最佳化-optimize 119
3.2.1 非線性方程組求解 120
3.2.3 計算函式局域最小值 125
3.2.4 計算全域最小值 127
3.3 線性代數-linalg 128
3.3.1 解線性方程組 129
3.3.4 奇異值分解-SVD 134
3.4 統計-stats 136
3.4.2 離散機率分布 139
3.4.4 二項分布、泊松分布、伽瑪分布 142
3.4.5 學生t-分布與t檢驗 147
3.4.6 卡方分布和卡方檢驗 151
3.5 數值積分-integrate 154
3.5.1 球的體積 154
3.5.2 解常微分方程組 156
3.5.3 ode類 157
3.5.4 信號處理-signal 164
3.5.5 中值濾波 164
3.5.6 濾波器設計 165
3.5.7 連續時間線性系統 167
3.6 插值-interpolate 172
3.6.1 一維插值 172
3.6.2 多維插值 177
3.7 稀疏矩陣-sparse 181
3.7.1 稀疏矩陣的存儲形式 182
3.7.2 最短路徑 183
3.8 圖像處理-ndimage 186
3.8.1 形態學圖像處理 187
3.8.2 圖像分割 192
3.9 空間算法庫-spatial 195
3.9.1 計算最近旁點 195
3.9.2 凸包 199
3.9.3 沃羅諾伊圖 201
3.9.4 德勞內三角化 204
第4章 matplotlib-繪製精美的圖表 207
4.1 快速繪圖棗催樂 207
4.1.1 使用pyplot模組繪圖 207
4.1.2 面向對象方式繪圖 210
4.1.3 配置屬性 211
4.1.4 繪製多子圖 212
4.1.5 配置檔案 215
4.1.6 在圖表中顯示中文 217
4.2 Artist對象 220
4.2.1 Artist的屬性 221
4.2.2 Figure容器 223
4.2.3 Axes容器 224
4.2.4 Axis容器 226
4.2.5 Artist對象的關係 230
4.3 坐標變換和注釋 231
4.3.1 4種坐標系 234
4.3.2 坐標變換的流水線 236
4.3.3 製作陰影效果 240
4.3.4 添加注釋 241
4.4 塊、路徑和集合 243
4.4.1 Path與Patch 243
4.4.2 集合 245
4.5 繪圖函式簡介 255
4.5.2 極坐標圖 256
4.5.3 柱狀圖 257
4.5.4 散列圖 258
4.5.5 圖像 259
4.5.6 等值線圖 261
4.5.7 四邊形格線 264
4.5.8 三角格線 267
4.5.9 箭頭圖 269
4.5.10 三維繪圖 273
4.6 matplotlib技巧集 274
4.6.1 使用agg後台在圖像上繪圖 274
4.6.2 回響滑鼠與鍵盤事件 277
4.6.3 動畫 285
4.6.4 添加GUI面板 288
第5章 Pandas-方便的數據分析庫 291
5.1 Pandas中的數據對象 291
5.1.1 Series對象 291
5.1.2 DataFrame對象 293
5.1.3 Index對象 297
5.1.4 MultiIndex對象 298
5.1.5 常用的函式參數 300
5.1.6 DataFrame的內部結構 301
5.2 下標存取 303
5.2.1 []操作符 304
5.2.2 .loc[]和.iloc[]存取器 304
5.2.3 獲取單個值 306
5.2.4 多級標籤的存取 306
5.2.5 query()方法 307
5.3 檔案的輸入輸出 307
5.3.1 CSV檔案 308
5.3.2 HDF5檔案 309
5.3.3 讀寫資料庫 313
5.3.4 使用Pickle序列化 314
5.4 數值運算函式 315
5.5 時間序列 323
5.5.1 時間點、時間段、時間間隔 323
5.5.2 時間序列 326
5.5.3 與NaN相關的函式 329
5.5.4 改變DataFrame的形狀 333
5.6 分組運算 338
5.6.1 groupby()方法 339
5.6.2 GroupBy對象 340
5.6.3 分組-運算-合併 341
5.7 數據處理和可視化實例 347
5.7.1 分析Pandas項目的提交歷史 347
5.7.2 分析空氣品質數據 354
第6章 SymPy-符號運算好幫手 359
6.1 從例子開始 359
6.1.1 封面上的經典公式 359
6.1.2 球體體積 361
6.1.3 數值微分 362
6.2 數學表達式 365
6.2.1 符號 365
6.2.2 數值 367
6.2.3 運算符和函式 368
6.2.4 通配符 371
6.3 符號運算 373
6.3.1 表達式變換和化簡 373
6.3.2 方程 376
6.3.3 微分 377
6.3.4 微分方程 378
6.3.5 積分 379
6.4 輸出符號表達式 380
6.4.1 lambdify 381
6.4.2 用autowrap()編譯表達式 381
6.4.3 使用cse()分步輸出表達式 384
6.5 機械運動模擬 385
6.5.1 推導系統的微分方程 386
6.5.2 將符號表達式轉換為程式 388
6.5.3 動畫演示 389
第7章 Traits & TraitsUI-輕鬆製作圖形界面 393
7.1 Traits類型入門 393
7.1.1 什麼是Traits屬性 393
7.1.2 Trait屬性的功能 396
7.1.3 Trait類型對象 399
7.1.4 Trait的元數據 401
7.2 Trait類型 403
7.2.1 預定義的Trait類型 403
7.2.2 Property屬性 406
7.2.3 Trait屬性監聽 408
7.2.4 Event和Button屬性 411
7.2.5 動態添加Trait屬性 412
7.3 TraitsUI入門 413
7.3.1 默認界面 414
7.3.2 用View定義界面 415
7.4 用Handler控制界面和模型 425
7.4.1 用Handler處理事件 426
7.4.2 Controller和UIInfo對象 429
7.4.3 回響Trait屬性的事件 431
7.5 屬性編輯器 432
7.5.1 編輯器演示程式 433
7.5.2 對象編輯器 436
7.5.3 自定義編輯器 440
7.6 函式曲線繪製工具 444
第8章 TVTK與Mayavi-數據的
三維可視化 451
8.1 VTK的流水線(Pipeline) 452
8.1.1 顯示圓錐 452
8.1.2 用ivtk觀察流水線 455
8.2 數據集 461
8.2.1 ImageData 461
8.2.2 RectilinearGrid 466
8.2.3 StructuredGrid 467
8.2.4 PolyData 470
8.3 TVTK的改進 473
8.3.1 TVTK的基本用法 474
8.3.2 Trait屬性 475
8.3.3 序列化 476
8.3.4 集合疊代 476
8.3.5 數組操作 477
8.4 TVTK可視化實例 478
8.4.1 切面 479
8.4.2 等值面 484
8.4.3 流線 487
8.4.4 計算圓柱的相貫線 491
8.5 用mlab快速繪圖 496
8.5.1 點和線 497
8.5.2 Mayavi的流水線 498
8.5.3 二維圖像的可視化 501
8.5.4 格線面mesh 505
8.5.5 修改和創建流水線 508
8.5.6 標量場 511
8.5.7 矢量場 513
8.6 將TVTK和Mayavi嵌入界面 515
8.6.1 TVTK場景的嵌入 516
8.6.2 Mayavi場景的嵌入 518
第9章 OpenCV-圖像處理和計算機視覺 523
9.1 圖像的輸入輸出 523
9.1.1 讀入並顯示圖像 523
9.1.2 圖像類型 524
9.1.3 圖像輸出 525
9.1.4 位元組序列與圖像的相互轉換 526
9.1.5 視頻輸出 527
9.1.6 視頻輸入 529
9.2 圖像處理 530
9.2.1 二維卷積 530
9.2.2 形態學運算 532
9.2.3 填充-floodFill 534
9.2.4 去瑕疵-inpaint 536
9.3 圖像變換 537
9.3.1 幾何變換 537
9.3.2 重映射-remap 540
9.3.3 直方圖 543
9.3.4 二維離散傅立葉變換 547
9.3.5 用雙目視覺圖像計算深度信息 550
9.4 圖像識別 553
9.4.1 用霍夫變換檢測直線和圓 553
9.4.2 圖像分割 558
9.4.3 SURF特徵匹配 561
9.5 形狀與結構分析 564
9.5.1 輪廓檢測 565
9.5.2 輪廓匹配 568
9.6 類型轉換 569
9.6.1 分析cv2的源程式 570
9.6.2 Mat對象 572
9.3.3 在cv和cv2之間轉換圖像對象 574
第10章 Cython-編譯Python程式 575
10.1 配置編譯器 575
10.2 Cython入門 577
10.2.1 計算矢量集的距離矩陣 577
10.2.2 將Cython程式編譯成擴展模組 579
10.2.3 C語言中的Python對象類型 581
10.2.4 使用cdef關鍵字聲明變數類型 582
10.2.5 使用def定義函式 585
10.3 高效處理數組 587
10.3.1 Cython的記憶體視圖 587
10.3.2 用降採樣提高繪圖速度 592
10.4 使用Python標準對象和API 596
10.4.1 操作list對象 596
10.4.2 創建tuple對象 597
10.4.3 用array.array作為動態數組 598
10.5 擴展類型 600
10.5.1 擴展類型的基本結構 600
10.5.2 一維浮點數向量類型 601
10.5.3 包裝ahocorasick庫 606
10.6 Cython技巧集 612
10.6.1 創建ufunc函式 613
10.6.2 快速調用DLL中的函式 617
10.6.3 調用BLAS函式 620
第11章 實例 627
11.1 使用泊松混合合成圖像 627
11.1.1 泊松混合算法 627
11.1.2 編寫代碼 629
11.1.3 演示程式 632
11.2 經典力學模擬 632
11.2.1 懸鏈線 633
11.2.2 最速降線 638
11.2.3 單擺模擬 641
11.3 推薦算法 644
11.3.1 讀入數據 645
11.3.2 推薦性能評價標準 646
11.3.3 矩陣分解 647
11.3.5 使用Cython疊代實現矩陣分解 651
11.4 頻域信號處理 654
11.4.1 FFT知識複習 654
11.4.2 合成時域信號 657
11.4.3 觀察信號的頻譜 660
11.4.4 卷積運算 671
11.5 布爾可滿足性問題求解器 675
11.5.1 用Cython包裝PicoSAT 678
11.5.2 數獨遊戲 682
11.5.3 掃雷遊戲 686
11.6 分形 693
11.6.1 Mandelbrot集合 693
11.6.3 L-System分形 706
11.6.4 分形山脈 710
第3章 SciPy-數值計算庫 117
3.1 常數和特殊函式 117
3.2 擬合與最佳化-optimize 119
3.2.1 非線性方程組求解 120
3.2.3 計算函式局域最小值 125
3.2.4 計算全域最小值 127
3.3 線性代數-linalg 128
3.3.1 解線性方程組 129
3.3.4 奇異值分解-SVD 134
3.4 統計-stats 136
3.4.2 離散機率分布 139
3.4.4 二項分布、泊松分布、伽瑪分布 142
3.4.5 學生t-分布與t檢驗 147
3.4.6 卡方分布和卡方檢驗 151
3.5 數值積分-integrate 154
3.5.1 球的體積 154
3.5.2 解常微分方程組 156
3.5.3 ode類 157
3.5.4 信號處理-signal 164
3.5.5 中值濾波 164
3.5.6 濾波器設計 165
3.5.7 連續時間線性系統 167
3.6 插值-interpolate 172
3.6.1 一維插值 172
3.6.2 多維插值 177
3.7 稀疏矩陣-sparse 181
3.7.1 稀疏矩陣的存儲形式 182
3.7.2 最短路徑 183
3.8 圖像處理-ndimage 186
3.8.1 形態學圖像處理 187
3.8.2 圖像分割 192
3.9 空間算法庫-spatial 195
3.9.1 計算最近旁點 195
3.9.2 凸包 199
3.9.3 沃羅諾伊圖 201
3.9.4 德勞內三角化 204
第4章 matplotlib-繪製精美的圖表 207
4.1 快速繪圖 207
4.1.1 使用pyplot模組繪圖 207
4.1.2 面向對象方式繪圖 210
4.1.3 配置屬性 211
4.1.4 繪製多子圖 212
4.1.5 配置檔案 215
4.1.6 在圖表中顯示中文 217
4.2 Artist對象 220
4.2.1 Artist的屬性 221
4.2.2 Figure容器 223
4.2.3 Axes容器 224
4.2.4 Axis容器 226
4.2.5 Artist對象的關係 230
4.3 坐標變換和注釋 231
4.3.1 4種坐標系 234
4.3.2 坐標變換的流水線 236
4.3.3 製作陰影效果 240
4.3.4 添加注釋 241
4.4 塊、路徑和集合 243
4.4.1 Path與Patch 243
4.4.2 集合 245
4.5 繪圖函式簡介 255
4.5.2 極坐標圖 256
4.5.3 柱狀圖 257
4.5.4 散列圖 258
4.5.5 圖像 259
4.5.6 等值線圖 261
4.5.7 四邊形格線 264
4.5.8 三角格線 267
4.5.9 箭頭圖 269
4.5.10 三維繪圖 273
4.6 matplotlib技巧集 274
4.6.1 使用agg後台在圖像上繪圖 274
4.6.2 回響滑鼠與鍵盤事件 277
4.6.3 動畫 285
4.6.4 添加GUI面板 288
第5章 Pandas-方便的數據分析庫 291
5.1 Pandas中的數據對象 291
5.1.1 Series對象 291
5.1.2 DataFrame對象 293
5.1.3 Index對象 297
5.1.4 MultiIndex對象 298
5.1.5 常用的函式參數 300
5.1.6 DataFrame的內部結構 301
5.2 下標存取 303
5.2.1 []操作符 304
5.2.2 .loc[]和.iloc[]存取器 304
5.2.3 獲取單個值 306
5.2.4 多級標籤的存取 306
5.2.5 query()方法 307
5.3 檔案的輸入輸出 307
5.3.1 CSV檔案 308
5.3.2 HDF5檔案 309
5.3.3 讀寫資料庫 313
5.3.4 使用Pickle序列化 314
5.4 數值運算函式 315
5.5 時間序列 323
5.5.1 時間點、時間段、時間間隔 323
5.5.2 時間序列 326
5.5.3 與NaN相關的函式 329
5.5.4 改變DataFrame的形狀 333
5.6 分組運算 338
5.6.1 groupby()方法 339
5.6.2 GroupBy對象 340
5.6.3 分組-運算-合併 341
5.7 數據處理和可視化實例 347
5.7.1 分析Pandas項目的提交歷史 347
5.7.2 分析空氣品質數據 354
第6章 SymPy-符號運算好幫手 359
6.1 從例子開始 359
6.1.1 封面上的經典公式 359
6.1.2 球體體積 361
6.1.3 數值微分 362
6.2 數學表達式 365
6.2.1 符號 365
6.2.2 數值 367
6.2.3 運算符和函式 368
6.2.4 通配符 371
6.3 符號運算 373
6.3.1 表達式變換和化簡 373
6.3.2 方程 376
6.3.3 微分 377
6.3.4 微分方程 378
6.3.5 積分 379
6.4 輸出符號表達式 380
6.4.1 lambdify 381
6.4.2 用autowrap()編譯表達式 381
6.4.3 使用cse()分步輸出表達式 384
6.5 機械運動模擬 385
6.5.1 推導系統的微分方程 386
6.5.2 將符號表達式轉換為程式 388
6.5.3 動畫演示 389
第7章 Traits & TraitsUI-輕鬆製作圖形界面 393
7.1 Traits類型入門 393
7.1.1 什麼是Traits屬性 393
7.1.2 Trait屬性的功能 396
7.1.3 Trait類型對象 399
7.1.4 Trait的元數據 401
7.2 Trait類型 403
7.2.1 預定義的Trait類型 403
7.2.2 Property屬性 406
7.2.3 Trait屬性監聽 408
7.2.4 Event和Button屬性 411
7.2.5 動態添加Trait屬性 412
7.3 TraitsUI入門 413
7.3.1 默認界面 414
7.3.2 用View定義界面 415
7.4 用Handler控制界面和模型 425
7.4.1 用Handler處理事件 426
7.4.2 Controller和UIInfo對象 429
7.4.3 回響Trait屬性的事件 431
7.5 屬性編輯器 432
7.5.1 編輯器演示程式 433
7.5.2 對象編輯器 436
7.5.3 自定義編輯器 440
7.6 函式曲線繪製工具 444
第8章 TVTK與Mayavi-數據的
三維可視化 451
8.1 VTK的流水線(Pipeline) 452
8.1.1 顯示圓錐 452
8.1.2 用ivtk觀察流水線 455
8.2 數據集 461
8.2.1 ImageData 461
8.2.2 RectilinearGrid 466
8.2.3 StructuredGrid 467
8.2.4 PolyData 470
8.3 TVTK的改進 473
8.3.1 TVTK的基本用法 474
8.3.2 Trait屬性 475
8.3.3 序列化 476
8.3.4 集合疊代 476
8.3.5 數組操作 477
8.4 TVTK可視化實例 478
8.4.1 切面 479
8.4.2 等值面 484
8.4.3 流線 487
8.4.4 計算圓柱的相貫線 491
8.5 用mlab快速繪圖 496
8.5.1 點和線 497
8.5.2 Mayavi的流水線 498
8.5.3 二維圖像的可視化 501
8.5.4 格線面mesh 505
8.5.5 修改和創建流水線 508
8.5.6 標量場 511
8.5.7 矢量場 513
8.6 將TVTK和Mayavi嵌入界面 515
8.6.1 TVTK場景的嵌入 516
8.6.2 Mayavi場景的嵌入 518
第9章 OpenCV-圖像處理和計算機視覺 523
9.1 圖像的輸入輸出 523
9.1.1 讀入並顯示圖像 523
9.1.2 圖像類型 524
9.1.3 圖像輸出 525
9.1.4 位元組序列與圖像的相互轉換 526
9.1.5 視頻輸出 527
9.1.6 視頻輸入 529
9.2 圖像處理 530
9.2.1 二維卷積 530
9.2.2 形態學運算 532
9.2.3 填充-floodFill 534
9.2.4 去瑕疵-inpaint 536
9.3 圖像變換 537
9.3.1 幾何變換 537
9.3.2 重映射-remap 540
9.3.3 直方圖 543
9.3.4 二維離散傅立葉變換 547
9.3.5 用雙目視覺圖像計算深度信息 550
9.4 圖像識別 553
9.4.1 用霍夫變換檢測直線和圓 553
9.4.2 圖像分割 558
9.4.3 SURF特徵匹配 561
9.5 形狀與結構分析 564
9.5.1 輪廓檢測 565
9.5.2 輪廓匹配 568
9.6 類型轉換 569
9.6.1 分析cv2的源程式 570
9.6.2 Mat對象 572
9.3.3 在cv和cv2之間轉換圖像對象 574
第10章 Cython-編譯Python程式 575
10.1 配置編譯器 575
10.2 Cython入門 577
10.2.1 計算矢量集的距離矩陣 577
10.2.2 將Cython程式編譯成擴展模組 579
10.2.3 C語言中的Python對象類型 581
10.2.4 使用cdef關鍵字聲明變數類型 582
10.2.5 使用def定義函式 585
10.3 高效處理數組 587
10.3.1 Cython的記憶體視圖 587
10.3.2 用降採樣提高繪圖速度 592
10.4 使用Python標準對象和API 596
10.4.1 操作list對象 596
10.4.2 創建tuple對象 597
10.4.3 用array.array作為動態數組 598
10.5 擴展類型 600
10.5.1 擴展類型的基本結構 600
10.5.2 一維浮點數向量類型 601
10.5.3 包裝ahocorasick庫 606
10.6 Cython技巧集 612
10.6.1 創建ufunc函式 613
10.6.2 快速調用DLL中的函式 617
10.6.3 調用BLAS函式 620
第11章 實例 627
11.1 使用泊松混合合成圖像 627
11.1.1 泊松混合算法 627
11.1.2 編寫代碼 629
11.1.3 演示程式 632
11.2 經典力學模擬 632
11.2.1 懸鏈線 633
11.2.2 最速降線 638
11.2.3 單擺模擬 641
11.3 推薦算法 644
11.3.1 讀入數據 645
11.3.2 推薦性能評價標準 646
11.3.3 矩陣分解 647
11.3.5 使用Cython疊代實現矩陣分解 651
11.4 頻域信號處理 654
11.4.1 FFT知識複習 654
11.4.2 合成時域信號 657
11.4.3 觀察信號的頻譜 660
11.4.4 卷積運算 671
11.5 布爾可滿足性問題求解器 675
11.5.1 用Cython包裝PicoSAT 678
11.5.2 數獨遊戲 682
11.5.3 掃雷遊戲 686
11.6 分形 693
11.6.1 Mandelbrot集合 693
11.6.3 L-System分形 706
11.6.4 分形山脈 710