本書旨在通過實際的Python 3.0代碼示例展示Python與數(shù)學(xué)應(yīng)用程序的緊密聯(lián)系,介紹將Python中的各種概念用于科學(xué)計算的方法。
本書共有15章。第1~3章介紹Python中的主要語法元素、基本數(shù)據(jù)類型、容器類型等概念;第4~9章介紹線性代數(shù)、數(shù)組、函數(shù)、類、迭代等與數(shù)學(xué)數(shù)據(jù)類型緊密相關(guān)的內(nèi)容;第10~14章就有關(guān)科學(xué)計算程序運行過程中錯誤處理、輸入輸出、測試等問題進行探索,并具體給出了一些綜合實例,以幫助讀者進一步掌握前述章節(jié)所涵蓋的內(nèi)容;第15章介紹符號計算的相關(guān)內(nèi)容,旨在讓讀者了解這一常用于推導(dǎo)和驗證理論上的數(shù)學(xué)模型和數(shù)值結(jié)果的技術(shù)。
本書特色鮮明,示例生動有趣,內(nèi)容易讀易學(xué),既適合Python初學(xué)者和程序員閱讀,也適合高校計算機專業(yè)的教師和學(xué)生參考。具有編程經(jīng)驗以及科學(xué)計算的愛好者也可以將本書作為研究SciPy和NumPy的參考資料。
Python不僅是一種通用的編程語言,更是免費且開源的語言和環(huán)境,在科學(xué)計算領(lǐng)域具有巨大的應(yīng)用潛力。
本書以數(shù)學(xué)應(yīng)用為背景介紹Python的相關(guān)知識。通過學(xué)習(xí)本書, 你將認(rèn)識到Python 是一種將科學(xué)計算與數(shù)學(xué)緊密結(jié)合起來的強大工具;學(xué)會使用面向?qū)ο蟮腜ython執(zhí)行計算任務(wù)的方法,并掌握計算數(shù)學(xué)的一個必要構(gòu)建塊——線性代數(shù)及其對象;學(xué)會函數(shù)和類的使用方法;熟悉測試工具并學(xué)習(xí)復(fù)雜的編程示例;通過Python模塊SymPy開啟計算機代數(shù)的學(xué)習(xí)之旅。
本書將介紹所有需要掌握的Python知識,以及將這些知識應(yīng)用于線性代數(shù)、數(shù)組、繪圖、迭代、函數(shù)以及多項式等的方法。
本書旨在幫助你:
● 理解Python的主要語法元素;
● 了解Python中重要和基本的數(shù)據(jù)類型;
● 理解計算數(shù)學(xué)的一個必要構(gòu)建塊——線性代數(shù)及其對象;
● 用Python的matplotlib包創(chuàng)建高質(zhì)量的表格和圖形,以便繪制和可視化結(jié)果;
● 定義和使用函數(shù),并學(xué)會將它們作為對象使用;
● 使用SciPy和NumPy包,以受益于其強大的與科學(xué)計算任務(wù)相關(guān)的數(shù)組數(shù)據(jù)類型;
● 深入理解何時、以何種方式正確地使用面向?qū)ο蟮腜ython編程;
● 專注于科學(xué)計算編程中的現(xiàn)代測試、調(diào)試和分析。
Claus Führer是瑞典隆德大學(xué)科學(xué)計算系的教授。他曾在許多國家和教學(xué)機構(gòu)任教,擁有十分豐富的課堂教學(xué)經(jīng)驗,所教授的課程涉及各級數(shù)值分析和工程數(shù)學(xué)的密集程序設(shè)計。在與工業(yè)界的研究he作中,Claus還開發(fā)出了數(shù)值分析軟件,并因此榮獲了2016年度隆德大學(xué)工程學(xué)院教師獎。
Jan Eric Solem是Python的狂熱愛好者。他曾任瑞典隆德大學(xué)的副教授,目前是Mapillary公司(一家街景計算機視覺公司)的CEO。他曾是Polar Rose公司的創(chuàng)始人兼CTO,并擔(dān)任人臉識別專家,還擔(dān)任過蘋果公司計算機視覺團隊的負(fù)責(zé)人。Jan是世界經(jīng)濟論壇的技術(shù)先驅(qū)之一,曾憑借圖像分析和模式識別的論文榮獲2005—2006年度北美論文獎。他也是《Programming Computer Vision with Python》 一書的作者。
Olivier Verdier于2009年獲得了瑞典隆德大學(xué)的數(shù)學(xué)博士學(xué)位。他也是德國科隆大學(xué)、挪威特隆赫姆大學(xué)、挪威卑爾根大學(xué)和瑞典烏梅奧大學(xué)的博士后。Oliview Verdier早在2007年就開始用Python進行科學(xué)計算,目前是挪威卑爾根大學(xué)數(shù)學(xué)系的副教授。
目錄
第 1章 入門 1
1.1 安裝和配置說明 1
1.1.1 安裝 1
1.1.2 Anaconda 2
1.1.3 配置 3
1.1.4 Python Shell 3
1.1.5 執(zhí)行腳本 3
1.1.6 獲取幫助 4
1.1.7 Jupyter – Python筆記本 4
1.2 程序與控制流 4
1.2.1 注釋 5
1.2.2 行連接 5
1.3 基本類型 6
1.3.1 數(shù)值類型 6
1.3.2 字符串 6
1.3.3 變量 7
1.3.4 列表 7
1.3.5 列表運算符 8
1.3.6 布爾表達(dá)式 8
1.4 使用循環(huán)來重復(fù)語句 9
1.4.1 重復(fù)任務(wù) 9
1.4.2 break和else 9
1.5 條件語句 10
1.6 使用函數(shù)封裝代碼 10
1.7 腳本和模塊 11
1.7.1 簡單的模塊—函數(shù)的
集合 12
1.7.2 使用模塊和命名空間 13
1.8 解釋器 13
1.9 小結(jié) 14
第 2章 變量和基本數(shù)據(jù)類型 15
2.1 變量 15
2.2 數(shù)值類型 16
2.2.1 整數(shù)類型 17
2.2.2 浮點數(shù) 17
2.2.3 復(fù)數(shù) 20
2.3 布爾類型 23
2.3.1 布爾運算符 23
2.3.2 布爾類型轉(zhuǎn)換 24
2.3.3 布爾類型自動轉(zhuǎn)換 24
2.3.4 and和or的返回值 25
2.3.5 布爾值和整數(shù) 26
2.4 字符串類型 26
2.5 小結(jié) 29
2.6 練習(xí) 30
第3章 容器類型 33
3.1 列表 33
3.1.1 切片 34
3.1.2 步長 36
3.1.3 列表修改 36
3.1.4 是否屬于列表 37
3.1.5 列表方法 37
3.1.6 原位操作 38
3.1.7 列表合并—zip 39
3.1.8 列表推導(dǎo) 39
3.2 數(shù)組 40
3.3 元組 41
3.4 字典 42
3.4.1 創(chuàng)建和修改字典 42
3.4.2 循環(huán)遍歷字典 43
3.5 集合 44
3.6 容器類型轉(zhuǎn)換 45
3.7 類型檢查 46
3.8 小結(jié) 47
3.9 練習(xí) 47
第4章 線性代數(shù)—數(shù)組 50
4.1 數(shù)組類型概要 50
4.1.1 向量和矩陣 50
4.1.2 索引和切片 52
4.1.3 線性代數(shù)運算 52
4.2 數(shù)學(xué)基礎(chǔ) 53
4.2.1 作為函數(shù)的數(shù)組 54
4.2.2 基于元素的運算 54
4.2.3 形狀和維數(shù) 54
4.2.4 點運算 55
4.3 數(shù)組類型 57
4.3.1 數(shù)組屬性 57
4.3.2 用列表創(chuàng)建數(shù)組 57
4.4 訪問數(shù)組項 59
4.4.1 基本數(shù)組切片 59
4.4.2 使用切片修改數(shù)組 61
4.5 數(shù)組構(gòu)造函數(shù) 61
4.6 訪問和修改形狀 62
4.6.1 shape函數(shù) 62
4.6.2 維數(shù) 63
4.6.3 重塑 63
4.7 疊加 65
4.8 作用于數(shù)組的函數(shù) 66
4.8.1 通用函數(shù) 66
4.8.2 數(shù)組函數(shù) 68
4.9 SciPy中的線性代數(shù)方法 69
4.9.1 使用LU來求解多個線性
方程組 70
4.9.2 使用SVD來解決最小二乘
問題 71
4.9.3 其他方法 72
4.10 小結(jié) 72
4.11 練習(xí) 73
第5章 高級數(shù)組 75
5.1 數(shù)組視圖和副本 75
5.1.1 數(shù)組視圖 75
5.1.2 切片視圖 76
5.1.3 轉(zhuǎn)置和重塑視圖 76
5.1.4 復(fù)制數(shù)組 76
5.2 數(shù)組比較 77
5.2.1 布爾數(shù)組 77
5.2.2 數(shù)組布爾運算 78
5.3 數(shù)組索引 79
5.3.1 使用布爾數(shù)組進行索引 79
5.3.2 使用where命令 80
5.4 代碼性能和向量化 81
5.5 廣播 83
5.5.1 數(shù)學(xué)視角 83
5.5.2 廣播數(shù)組 86
5.5.3 典型示例 88
5.6 稀疏矩陣 90
5.6.1 稀疏矩陣格式 91
5.6.2 生成稀疏矩陣 94
5.6.3 稀疏矩陣方法 94
5.7 小結(jié) 95
第6章 繪圖 96
6.1 基本繪圖 96
6.2 格式化 100
6.3 meshgrid和contours函數(shù) 103
6.4 圖像和等值線 106
6.5 matplotlib對象 108
6.5.1 坐標(biāo)軸對象 108
6.5.2 修改線條屬性 109
6.5.3 注釋 110
6.5.4 曲線間的填充面積 111
6.5.5 刻度和刻度標(biāo)簽 112
6.6 繪制三維圖 113
6.7 用繪圖制作電影 116
6.8 小結(jié) 117
6.9 練習(xí) 117
第7章 函數(shù) 120
7.1 基本原理 120
7.2 形參和實參 121
7.2.1 參數(shù)傳遞—通過位置和
關(guān)鍵字 121
7.2.2 更改實參 122
7.2.3 訪問本地命名空間之外
定義的變量 122
7.2.4 默認(rèn)參數(shù) 123
7.2.5 可變參數(shù) 124
7.3 返回值 125
7.4 遞歸函數(shù) 126
7.5 函數(shù)文檔 128
7.6 函數(shù)是對象 128
7.7 匿名函數(shù)—lambda
關(guān)鍵字 130
7.8 裝飾器 131
7.9 小結(jié) 132
7.10 練習(xí) 133
第8章 類 135
8.1 類的簡介 136
8.1.1 類語法 136
8.1.2 _ _init_ _方法 137
8.2 屬性和方法 138
8.2.1 特殊方法 139
8.2.2 彼此依賴的屬性 143
8.2.3 綁定和未綁定方法 145
8.2.4 類屬性 146
8.2.5 類方法 146
8.3 子類和繼承 148
8.4 封裝 151
8.5 裝飾器類 152
8.6 小結(jié) 154
8.7 練習(xí) 154
第9章 迭代 156
9.1 for語句 156
9.2 控制循環(huán)內(nèi)流程 157
9.3 迭代器 158
9.3.1 生成器 159
9.3.2 迭代器是一次性的 159
9.3.3 迭代器工具 160
9.3.4 遞歸序列的生成器 161
9.4 加速收斂 163
9.5 列表填充模式 165
9.5.1 使用append方法來填充
列表 165
9.5.2 迭代器中的列表 166
9.5.3 存儲生成的值 166
9.6 將迭代器作為列表使用 167
9.6.1 生成器表達(dá)式 167
9.6.2 壓縮迭代器 168
9.7 迭代器對象 169
9.8 無限迭代 170
9.8.1 while循環(huán) 170
9.8.2 遞歸 171
9.9 小結(jié) 171
9.10 練習(xí) 172
第 10章 異常處理 175
10.1 什么是異常 175
10.1.1 基本原理 177
10.1.2 用戶定義異常 179
10.1.3 上下文管理器—
with語句 180
10.2 查找錯誤:調(diào)試 181
10.2.1 漏洞 182
10.2.2 堆棧 182
10.2.3 Python調(diào)試器 183
10.2.4 調(diào)試命令 185
10.2.5 IPython調(diào)試 186
10.3 小結(jié) 187
第 11章 命名空間、范圍和模塊 188
11.1 命名空間 188
11.2 變量范圍 189
11.3 模塊 191
11.3.1 簡介 191
11.3.2 IPython模塊 192
11.3.3 變量_ _name_ _ 193
11.3.4 一些有用的模塊 193
11.4 小結(jié) 194
第 12章 輸入和輸出 195
12.1 文件處理 195
12.1.1 文件交互 195
12.1.2 文件是可迭代的 196
12.1.3 文件模式 197
12.2 NumPy方法 198
12.2.1 savetxt 198
12.2.2 loadtxt 198
12.3 Pickling 199
12.4 Shelves 200
12.5 讀寫Matlab數(shù)據(jù)文件 200
12.6 讀寫圖像 201
12.7 小結(jié) 202
第 13章 測試 203
13.1 手動測試 203
13.2 自動測試 204
13.3 使用unittest包 206
13.4 參數(shù)化測試 209
13.5 斷言工具 210
13.6 浮點值比較 210
13.7 單元和功能測試 212
13.8 調(diào)試 213
13.9 測試發(fā)現(xiàn) 213
13.10 測量執(zhí)行時間 213
13.10.1 用魔法函數(shù)計時 214
13.10.2 使用Python的timeit
計時模塊 215
13.10.3 用上下文管理器
計時 216
13.11 小結(jié) 217
13.12 練習(xí) 217
第 14章 綜合示例 219
14.1 多項式 219
14.1.1 理論背景 219
14.1.2 任務(wù) 220
14.2 多項式類 221
14.3 牛頓多項式 225
14.4 譜聚類算法 226
14.5 解決初始值問題 230
14.6 小結(jié) 233
14.7 練習(xí) 233
第 15章 符號計算—SymPy 235
15.1 什么是符號計算 235
15.2 SymPy的基本元素 238
15.2.1 符號—所有公式的
基礎(chǔ) 238
15.2.2 數(shù)字 239
15.2.3 函數(shù) 239
15.3 基本函數(shù) 241
15.4 符號線性代數(shù) 243
15.5 SymPy線性代數(shù)方法示例 245
15.6 替換 246
15.7 評估符號表達(dá)式 249
15.8 符號表達(dá)式轉(zhuǎn)化為數(shù)值
函數(shù) 250
15.9 小結(jié) 252
參考文獻(xiàn) 253