程序員數(shù)學 用Python學透線性代數(shù)和微積分
定 價:129.8 元
叢書名:Python
- 作者:[美]保羅·奧蘭德(Paul Orland)
- 出版時間:2021/12/1
- ISBN:9787115576491
- 出 版 社:人民郵電出版社
- 中圖法分類:TP311.1
- 頁碼:513
- 紙張:
- 版次:01
- 開本:16開
代碼和數(shù)學是相知相惜的好伙伴,它們基于共同的理性思維,數(shù)學公式的推導可以自然地在編寫代碼的過程中展開。本書帶領(lǐng)程序員使用自己熟知的工具,即代碼,來理解機器學習和游戲設計中的數(shù)學知識。通過Python代碼和200多個小項目,讀者將掌握二維向量、三維向量、矩陣變換、線性方程、微積分、線性回歸、logistic回歸、梯度下降等知識。
1.500余幅圖片,本書以圖文結(jié)合的方式幫助你用Python代碼解決程序設計中的數(shù)學問題。
2.300余個練習,通過邊學邊練,你會發(fā)現(xiàn)線性代數(shù)和微積分的重要概念躍然紙上、印在腦中。
3.提供配套源代碼和本書彩色圖片下載。
數(shù)學擁有無窮的力量。它既幫助游戲開發(fā)工程師建模物理世界,也幫助量化金融分析師賺取利潤,還幫助音頻處理工程師制作音樂。在數(shù)據(jù)科學和機器學習領(lǐng)域,數(shù)學知識更是不可或缺的。
有人熱愛數(shù)學,將它比作詩歌,為之著迷一生;有人很難領(lǐng)會數(shù)學的妙處,受困于“數(shù)學焦慮癥”。本書正是為了幫助程序員消除這種焦慮,用自己熟悉的工具,即代碼,重新發(fā)現(xiàn)數(shù)學之美。
√ 向量幾何和計算機圖形
√ 矩陣和線性變換
√ 微積分的核心概念
√ 仿真和優(yōu)化
√ 圖像處理和音頻處理
√ 用于回歸和分類的機器學習算法
“這本書循序漸進地介紹了程序員應該掌握的有用的數(shù)學概念!
——Christopher Haupt,Swoogo公司工程副總裁
“這本書嚴謹而簡明地概述了對現(xiàn)代編程起支撐作用的數(shù)學知識!
——Dan Sheikh,BCG Digital Ventures公司工程師
“實用、引人入勝。推薦所有程序員閱讀!
——Vincent Zhu,RethinkXSocial網(wǎng)站聯(lián)合創(chuàng)始人兼CTO
“這本書為需要提高數(shù)學技能的程序員建造了一座橋梁,使數(shù)學不再那么神秘、那么難以理解!
——Robert Walsh,Excalibur Solutions公司總裁
【作者簡介】
保羅·奧蘭德(Paul Orland)
硅谷創(chuàng)業(yè)公司Tachyus的聯(lián)合創(chuàng)始人兼CEO,擁有耶魯大學數(shù)學學士學位和華盛頓大學物理學碩士學位,曾任微軟公司軟件開發(fā)工程師,近10年來一直致力于使用數(shù)學和函數(shù)式編程來優(yōu)化能源生產(chǎn)。
【譯者簡介】
百度KFive
KFive是百度App大前端團隊,成員涵蓋PC端和手機百度的大前端研發(fā)者。在業(yè)務支持之外,KFive研究的技術(shù)方向還包括前端基礎(chǔ)架構(gòu)、跨端開發(fā)、Node.js、端智能和前端智能化等,并且積累了豐富的產(chǎn)出。KFive的名稱不僅來源于起初的辦公地點在百度科技園五號樓,更體現(xiàn)了其對軟件開發(fā)的理解,即“五Key”:Key1者,精益求精;Key2者,大巧不工;Key3者,獨運匠心;Key4者,百煉千錘;Key5者,善始善終。
第 1章 通過代碼學數(shù)學 1
1.1 使用數(shù)學和軟件解決商業(yè)問題 2
1.1.1 預測金融市場走勢 2
1.1.2 尋找優(yōu)質(zhì)交易 4
1.1.3 構(gòu)建三維圖形和動畫 6
1.1.4 對物理世界建!8
1.2 如何高效學習數(shù)學 9
1.2.1 Jane想學習數(shù)學 9
1.2.2 在數(shù)學課本中苦苦掙扎 10
1.3 用上你訓練有素的左腦 11
1.3.1 使用正式的語言 11
1.3.2 構(gòu)建你自己的計算器 12
1.3.3 用函數(shù)建立抽象概念 13
1.4 小結(jié) 14
第 一部分 向量和圖形
第 2章 二維向量繪圖 16
2.1 二維向量繪圖 16
2.1.1 如何表示二維向量 18
2.1.2 用Python繪制二維圖形 20
2.1.3 練習 23
2.2 平面向量運算 25
2.2.1 向量的分量和長度 28
2.2.2 向量與數(shù)相乘 29
2.2.3 減法、位移和距離 31
2.2.4 練習 34
2.3 平面上的角度和三角學 41
2.3.1 從角度到分量 42
2.3.2 Python中的三角學和弧度 46
2.3.3 從分量到角度 47
2.3.4 練習 50
2.4 向量集合的變換 57
2.4.1 組合向量變換 59
2.4.2 練習 60
2.5 用Matplotlib繪圖 61
2.6 小結(jié) 62
第3章 上升到三維世界 63
3.1 在三維空間中繪制向量 64
3.1.1 用坐標表示三維向量 66
3.1.2 用Python進行三維繪圖 66
3.1.3 練習 68
3.2 三維空間中的向量運算 70
3.2.1 添加三維向量 70
3.2.2 三維空間中的標量乘法 72
3.2.3 三維向量減法 72
3.2.4 計算長度和距離 73
3.2.5 計算角度和方向 74
3.2.6 練習 75
3.3 點積:測量向量對齊 78
3.3.1 繪制點積 78
3.3.2 計算點積 80
3.3.3 點積的示例 82
3.3.4 用點積測量角度 83
3.3.5 練習 85
3.4 向量積:測量定向區(qū)域 88
3.4.1 在三維空間中確定自己的朝向 88
3.4.2 找到向量積的方向 89
3.4.3 求向量積的長度 91
3.4.4 計算三維向量的向量積 92
3.4.5 練習 93
3.5 在二維平面上渲染三維對象 96
3.5.1 使用向量定義三維對象 97
3.5.2 二維投影 98
3.5.3 確定面的朝向和陰影 99
3.5.4 練習 101
3.6 小結(jié) 102
第4章 變換向量和圖形 103
4.1 變換三維對象 105
4.1.1 繪制變換后的對象 105
4.1.2 組合向量變換 107
4.1.3 繞軸旋轉(zhuǎn)對象 110
4.1.4 創(chuàng)造屬于你自己的幾何變換 113
4.2 線性變換 117
4.2.1 向量運算的不變性 117
4.2.2 圖解線性變換 119
4.2.3 為什么要做線性變換 121
4.2.4 計算線性變換 124
4.2.5 練習 127
4.3 小結(jié) 132
第5章 使用矩陣計算變換 134
5.1 用矩陣表示線性變換 135
5.1.1 把向量和線性變換寫成矩陣形式 135
5.1.2 矩陣與向量相乘 136
5.1.3 用矩陣乘法組合線性變換 138
5.1.4 實現(xiàn)矩陣乘法 140
5.1.5 用矩陣變換表示三維動畫 141
5.1.6 練習 142
5.2 不同形狀矩陣的含義 148
5.2.1 列向量組成的矩陣 149
5.2.2 哪些矩陣可以相乘 151
5.2.3 將方陣和非方陣視為向量函數(shù) 152
5.2.4 從三維到二維的線性映射投影 154
5.2.5 組合線性映射 156
5.2.6 練習 157
5.3 用矩陣平移向量 163
5.3.1 線性化平面平移 163
5.3.2 尋找做二維平移的三維矩陣 167
5.3.4 在四維世界里平移三維對象 170
5.4 小結(jié) 174
第6章 高維泛化 176
6.1 泛化向量的定義 177
6.1.1 為二維坐標向量創(chuàng)建一個類 178
6.1.3 使用同樣的方法定義三維向量 179
6.1.4 構(gòu)建向量基類 180
6.1.5 定義向量空間 182
6.1.6 對向量空間類進行單元測試 185
6.2 探索不同的向量空間 188
6.2.1 枚舉所有坐標向量空間 188
6.2.2 識別現(xiàn)實中的向量 190
6.2.3 將函數(shù)作為向量處理 192
6.2.4 將矩陣作為向量處理 194
6.2.5 使用向量運算來操作圖像 195
6.2.6 練習 198
6.3 尋找更小的向量空間 205
6.3.1 定義子空間 205
6.3.2 從單個向量開始 207
6.3.3 生成更大的空間 207
6.3.4 定義“維度”的概念 209
6.3.5 尋找函數(shù)向量空間的子空間 210
6.3.6 圖像的子空間 212
6.3.7 練習 214
6.4 小結(jié) 220
第7章 求解線性方程組 222
7.1 設計一款街機游戲 223
7.1.1 游戲建模 223
7.1.2 渲染游戲 224
7.1.3 發(fā)射激光 225
7.1.4 練習 226
7.2 找到直線的交點 227
7.2.1 為直線選擇正確的公式 227
7.2.2 直線的標準形式方程 229
7.2.3 線性方程組的矩陣形式 231
7.2.4 使用NumPy求解線性方程組 233
7.2.6 識別不可解方程組 234
7.2.7 練習 236
7.3 將線性方程泛化到更高維度 240
7.3.1 在三維空間中表示平面 240
7.3.2 在三維空間中求解線性方程組 243
7.3.4 計算維數(shù)、方程和解 245
7.3.5 練習 246
7.4 通過解線性方程來改變向量的基 253
7.4.1 在三維空間中求解 255
7.4.2 練習 256
7.5 小結(jié) 257
第二部分 微積分和物理仿真
第8章 理解變化率 261
8.1 根據(jù)體積計算平均流速 262
8.1.1 實現(xiàn)average_flow_rate函數(shù) 263
8.1.2 用割線描繪平均流速 264
8.1.3 負變化率 265
8.1.4 練習 266
8.2 繪制隨時間變化的平均流速 266
8.2.1 計算不同時間段內(nèi)的平均流速 267
8.2.2 繪制間隔流速圖 268
8.2.3 練習 270
8.3 瞬時流速的近似值 271
8.3.1 計算小割線的斜率 272
8.3.2 構(gòu)建瞬時流速函數(shù) 274
8.3.3 柯里化并繪制瞬時流速函數(shù) 277
8.4 體積變化的近似值 278
8.4.1 計算短時間間隔內(nèi)的體積變化 279
8.4.2 將時間分割成更小的間隔 280
8.4.3 在流速圖上繪制體積變化的圖形 280
8.4.4 練習 283
8.5 繪制隨時間變化的體積圖 283
8.5.1 計算隨時間變化的體積 283
8.5.2 繪制體積函數(shù)的黎曼和 285
8.5.3 提升近似結(jié)果的精確度 286
8.5.4 定積分和不定積分 288
8.6 小結(jié) 290
第9章 模擬運動的對象 291
9.1 模擬勻速運動 291
9.1.1 給小行星設置速度 292
9.1.2 更新游戲引擎,讓小行星運動 292
9.1.3 保持小行星在屏幕上 293
9.1.4 練習 295
9.2 模擬加速 295
9.3 深入研究歐拉方法 296
9.3.1 手動計算歐拉方法 297
9.3.2 使用 Python 實現(xiàn)算法 298
9.4 用更小的時間步執(zhí)行歐拉方法 300
9.5 小結(jié) 305
第 10章 使用符號表達式 306
10.1 用計算機代數(shù)系統(tǒng)計算精確的導數(shù) 309
10.2.1 將表達式拆分成若干部分 310
10.2.3 使用Python語言實現(xiàn)表達式樹 311
10.2.4 練習 313
10.3 符號表達式的應用 315
10.3.1 尋找表達式中的所有變量 317
10.3.3 表達式展開 319
10.3.4 練習 321
10.4 求函數(shù)的導數(shù) 323
10.4.1 冪的導數(shù) 324
10.4.2 變換后函數(shù)的導數(shù) 324
10.4.3 一些特殊函數(shù)的導數(shù) 326
10.4.4 乘積與組合的導數(shù) 327
10.4.5 練習 328
10.5 自動計算導數(shù) 330
10.5.1 實現(xiàn)表達式的導數(shù)方法 330
10.5.2 實現(xiàn)乘積法則和鏈式法則 332
10.5.4 練習 334
10.6 符號化積分函數(shù) 335
10.6.1 積分作為反導數(shù) 335
10.6.2 SymPy庫介紹 336
10.6.3 練習 337
10.7 小結(jié) 338
第 11章 模擬力場 339
11.1 用向量場對引力建!339
11.2 引力場建!342
11.2.1 定義一個向量場 343
11.2.2 定義一個簡單的力場 344
11.3 把引力加入小行星游戲 345
11.3.1 讓游戲中的對象感受到引力 346
11.3.2 練習 349
11.4 引入勢能 350
11.4.1 定義勢能標量場 351
11.4.2 將標量場繪制成熱圖 352
11.4.3 將標量場繪制成等高線圖 354
11.5.1 用橫截面測量陡度 354
11.5.2 計算偏導數(shù) 356
11.5.3 用梯度求圖形的陡度 357
11.5.4 用勢能的梯度計算力場 359
11.5.5 練習 361
11.6 小結(jié) 364
第 12章 優(yōu)化物理系統(tǒng) 365
12.1 測試炮彈模擬器 367
12.1.1 用歐拉方法建立模擬器 368
12.1.2 測量彈道的屬性 369
12.1.3 探索不同的發(fā)射角度 370
12.1.4 練習 371
12.2 計算最佳射程 373
12.2.1 求炮彈射程關(guān)于發(fā)射角的函數(shù) 373
12.2.2 求最大射程 376
12.2.3 確定最大值和最小值 378
12.2.4 練習 379
12.3 增強模擬器 381
12.3.1 添加另一個維度 381
12.3.2 在炮彈周圍建立地形模型 383
12.3.4 練習 386
12.4 利用梯度上升優(yōu)化范圍 388
12.4.1 繪制射程與發(fā)射參數(shù)的關(guān)系圖 388
12.4.2 射程函數(shù)的梯度 389
12.4.3 利用梯度尋找上坡方向 390
12.4.4 實現(xiàn)梯度上升 392
12.4.5 練習 395
12.5 小結(jié) 399
第 13章 用傅里葉級數(shù)分析聲波 400
13.1 聲波的組合和分解 401
13.2 用Python播放聲波 402
13.2.1 產(chǎn)生第 一個聲音 402
13.2.2 演奏音符 405
13.2.3 練習 406
13.3 把正弦波轉(zhuǎn)化為聲音 406
13.3.1 用正弦函數(shù)制作音頻 406
13.3.2 改變正弦函數(shù)的頻率 408
13.3.3 對聲波進行采樣和播放 409
13.3.4 練習 411
13.4 組合聲波得到新的聲波 412
13.4.1 疊加聲波的樣本來構(gòu)造和弦 412
13.4.2 兩個聲波疊加后的圖形 413
13.4.3 構(gòu)造正弦波的線性組合 414
13.4.4 用正弦波構(gòu)造一個熟悉的函數(shù) 416
13.4.5 練習 419
13.5 將聲波分解為傅里葉級數(shù) 419
13.5.1 用內(nèi)積確定向量分量 420
13.5.2 定義周期函數(shù)的內(nèi)積 421
13.5.3 實現(xiàn)一個函數(shù)來計算傅里葉系數(shù) 423
13.5.4 求方波的傅里葉系數(shù) 424
13.5.5 其他波形的傅里葉系數(shù) 424
13.5.6 練習 426
13.6 小結(jié) 428
第三部分 機器學習的應用
第 14章 數(shù)據(jù)的函數(shù)擬合 431
14.1 衡量函數(shù)的擬合質(zhì)量 433
14.1.1 計算數(shù)據(jù)與函數(shù)的距離 434
14.1.2 計算誤差的平方和 436
14.1.3 計算汽車價格函數(shù)的代價 440
14.2 探索函數(shù)空間 441
14.2.1 繪制通過原點的直線的代價 442
14.2.2 所有線性函數(shù)的空間 443
14.2.3 練習 445
14.3 使用梯度下降法尋找最佳擬合線 445
14.3.1 縮放數(shù)據(jù) 445
14.3.2 找到并繪制最佳擬合線 446
14.3.3 練習 447
14.4 非線性函數(shù)擬合 448
14.4.1 理解指數(shù)函數(shù)的行為 448
14.4.2 尋找最佳擬合的指數(shù)函數(shù) 451
14.5 小結(jié) 453
第 15章 使用logistic回歸對數(shù)據(jù)分類 455
15.1 用真實數(shù)據(jù)測試分類函數(shù) 456
15.1.1 加載汽車數(shù)據(jù) 457
15.1.2 測試分類函數(shù) 458
15.1.3 練習 458
15.2 繪制決策邊界 460
15.2.1 繪制汽車的向量空間 460
15.2.2 繪制更好的決策邊界 461
15.2.3 實現(xiàn)分類函數(shù) 462
15.2.4 練習 463
15.3 將分類問題構(gòu)造為回歸問題 464
15.3.1 縮放原始汽車數(shù)據(jù) 464
15.3.2 衡量汽車的“寶馬性” 465
15.3.3 sigmoid函數(shù) 467
15.3.4 將sigmoid函數(shù)與其他函數(shù)組合 468
15.3.5 練習 470
15.4 探索可能的logistic函數(shù) 471
15.4.1 參數(shù)化logistic函數(shù) 472
15.4.2 衡量logistic函數(shù)的擬合質(zhì)量 472
15.4.3 測試不同的logistic函數(shù) 474
15.4.4 練習 475
15.5 尋找最佳logistic函數(shù) 477
15.5.1 三維中的梯度下降法 477
15.5.2 使用梯度下降法尋找最佳擬合 478
15.5.3 測試和理解最佳logistic分類器 479
15.5.4 練習 481
15.6 小結(jié) 483
第 16章 訓練神經(jīng)網(wǎng)絡 484
16.1 用神經(jīng)網(wǎng)絡對數(shù)據(jù)進行分類 485
16.2 手寫數(shù)字圖像分類 486
16.2.1 構(gòu)建64維圖像向量 487
16.2.2 構(gòu)建隨機數(shù)字分類器 488
16.2.3 測試數(shù)字分類器的表現(xiàn) 489
16.2.4 練習 490
16.3 設計神經(jīng)網(wǎng)絡 491
16.3.1 組織神經(jīng)元和連接 492
16.3.2 神經(jīng)網(wǎng)絡數(shù)據(jù)流 492
16.3.3 計算激活值 495
16.3.4 用矩陣表示法計算激活值 498
16.4 用Python構(gòu)建神經(jīng)網(wǎng)絡 499
16.4.1 用Python實現(xiàn)MLP類 500
16.4.2 評估MLP 502
16.4.3 測試MLP的分類效果 503
16.4.4 練習 504
16.5 使用梯度下降法訓練神經(jīng)網(wǎng)絡 504
16.5.1 將訓練構(gòu)造為最小化問題 505
16.5.3 使用scikit-learn自動訓練 507
16.6 使用反向傳播計算梯度 509
16.6.1 根據(jù)最后一層的權(quán)重計算代價 509
16.6.2 利用鏈式法則計算最后一層權(quán)重的偏導數(shù) 510
16.6.3 練習 512
16.7 小結(jié) 513
附錄A 準備Python(圖靈社區(qū)下載)
附錄B Python技巧和竅門(圖靈社區(qū)下載)
附錄C 使用OpenGL和PyGame加載和渲染三維模型(圖靈社區(qū)下載)
附錄D 數(shù)學符號參考(圖靈社區(qū)下載)