程序員數學 : 用 Python 學透線性代數和微積分 (Math for Programmers: 3D graphics, machine learning, and simulations with Python)

Paul Orland

  • 程序員數學 : 用 Python 學透線性代數和微積分 (Math for Programmers: 3D graphics, machine learning, and simulations with Python)-preview-1
  • 程序員數學 : 用 Python 學透線性代數和微積分 (Math for Programmers: 3D graphics, machine learning, and simulations with Python)-preview-2
程序員數學 : 用 Python 學透線性代數和微積分 (Math for Programmers: 3D graphics, machine learning, and simulations with Python)-preview-1

買這商品的人也買了...

商品描述

代碼和數學是相知相惜的好夥伴,它們基於共同的理性思維,數學公式的推導可以自然地在編寫代碼的過程中展開。本書帶領程序員使用自己熟知的工具,即代碼,來理解機器學習和游戲設計中的數學知識。通過Python代碼和200多個小項目,讀者將掌握二維向量、三維向量、矩陣變換、線性方程、微積分、線性回歸、logistic回歸、梯度下降等知識。

作者簡介

【作者簡介】
保羅·奧蘭德(Paul Orland)
矽谷創業公司Tachyus的聯合創始人兼CEO,擁有耶魯大學數學學士學位和華盛頓大學物理學碩士學位,曾任微軟公司軟件開發工程師,近10年來一直致力於使用數學和函數式編程來優化能源生產。


【譯者簡介】
百度KFive
KFive是百度App大前端團隊,成員涵蓋PC端和手機百度的大前端研發者。在業務支持之外,KFive研究的技術方向還包括前端基礎架構、跨端開發、Node.js、端智能和前端智能化等,並且積累了豐富的產出。 KFive的名稱不僅來源於起初的辦公地點在百度科技園五號樓,更體現了其對軟件開發的理解,即“五Key”:Key1者,精益求精;Key2者,大巧不工;Key3者,獨運匠心;Key4者,百煉千錘;Key5者,善始善終。

目錄大綱

第 1章 通過代碼學數學 1
1.1 使用數學和軟件解決商業問題 2
1.1.1 預測金融市場走勢 2
1.1.2 尋找優質交易 4
1.1.3 構建三維圖形和動畫 6
1.1.4 對物理世界建模 8
1.2 如何高效學習數學 9
1.2.1 Jane想學習數學 9
1.2.2 在數學課本中苦苦掙扎 10
1.3 用上你訓練有素的左腦 11
1.3.1 使用正式的語言 11
1.3.2 構建你自己的計算器 12
1.3.3 用函數建立抽象概念 13
1.4 小結 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 向量與數相乘 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 小結 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 向量積:測量定向區域 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 小結 102
第4章 變換向量和圖形 103
4.1 變換三維對象 105
4.1.1 繪製變換後的對象 105
4.1.2 組合向量變換 107
4.1.3 繞軸旋轉對象 110
4.1.4 創造屬於你自己的幾何變換 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 小結 132
第5章 使用矩陣計算變換 134
5.1 用矩陣表示線性變換 135
5.1.1 把向量和線性變換寫成矩陣形式 135
5.1.2 矩陣與向量相乘 136
5.1.3 用矩陣乘法組合線性變換 138
5.1.4 實現矩陣乘法 140
5.1.5 用矩陣變換錶示三維動畫 141
5.1.6 練習 142
5.2 不同形狀矩陣的含義 148
5.2.1 列向量組成的矩陣 149
5.2.2 哪些矩陣可以相乘 151
5.2.3 將方陣和非方陣視為向量函數 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 小結 174
第6章 高維泛化 176
6.1 泛化向量的定義 177
6.1.1 為二維坐標向量創建一個類 178
6.1.3 使用同樣的方法定義三維向量 179
6.1.4 構建向量基類 180
6.1.5 定義向量空間 182
6.1.6 對向量空間類進行單元測試 185
6.2 探索不同的向量空間 188
6.2.1 枚舉所有坐標向量空間 188
6.2.2 識別現實中的向量 190
6.2.3 將函數作為向量處理 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 尋找函數向量空間的子空間 210
6.3.6 圖像的子空間 212
6.3.7 練習 214
6.4 小結 220
第7章 求解線性方程組 222
7.1 設計一款街機遊戲 223
7.1.1 遊戲建模 223
7.1.2 渲染遊戲 224
7.1.3 發射激光 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 計算維數、方程和解 245
7.3.5 練習 246
7.4 通過解線性方程來改變向量的基 253
7.4.1 在三維空間中求解 255
7.4.2 練習 256
7.5 小結 257
第二部分 微積分和物理仿真
第8章 理解變化率 261
8.1 根據體積計算平均流速 262
8.1.1 實現average_flow_rate函數 263
8.1.2 用割線描繪平均流速 264
8.1.3 負變化率 265
8.1.4 練習 266
8.2 繪製隨時間變化的平均流速 266
8.2.1 計算不同時間段內的平均流速 267
8.2.2 繪製間隔流速圖 268
8.2.3 練習 270
8.3 瞬時流速的近似值 271
8.3.1 計算小割線的斜率 272
8.3.2 構建瞬時流速函數 274
8.3.3 柯里化並繪製瞬時流速函數 277
8.4 體積變化的近似值 278
8.4.1 計算短時間間隔內的體積變化 279
8.4.2 將時間分割成更小的間隔 280
8.4.3 在流速圖上繪製體積變化的圖形 280
8.4.4 練習 283
8.5 繪製隨時間變化的體積圖 283
8.5.1 計算隨時間變化的體積 283
8.5.2 繪製體積函數的黎曼和 285
8.5.3 提升近似結果的精確度 286
8.5.4 定積分和不定積分 288
8.6 小結 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 實現算法 298
9.4 用更小的時間步執行歐拉方法 300
9.5 小結 305
第 10章 使用符號表達式 306
10.1 用計算機代數係統計算精確的導數 309
10.2.1 將表達式拆分成若干部分 310
10.2.3 使用Python語言實現表達式樹 311
10.2.4 練習 313
10.3 符號表達式的應用 315
10.3.1 尋找表達式中的所有變量 317
10.3.3 表達式展開 319
10.3.4 練習 321
10.4 求函數的導數 323
10.4.1 冪的導數 324
10.4.2 變換後函數的導數 324
10.4.3 一些特殊函數的導數 326
10.4.4 乘積與組合的導數 327
10.4.5 練習 328
10.5 自動計算導數 330
10.5.1 實現表達式的導數方法 330
10.5.2 實現乘積法則和鍊式法則 332
10.5.4 練習 334
10.6 符號化積分函數 335
10.6.1 積分作為反導數 335
10.6.2 SymPy庫介紹 336
10.6.3 練習 337
10.7 小結 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 計算偏導數 356
11.5.3 用梯度求圖形的陡度 357
11.5.4 用勢能的梯度計算力場 359
11.5.5 練習 361
11.6 小結 364
第 12章 優化物理系統 365
12.1 測試砲彈模擬器 367
12.1.1 用歐拉方法建立模擬器 368
12.1.2 測量彈道的屬性 369
12.1.3 探索不同的發射角度 370
12.1.4 練習 371
12.2 計算最佳射程 373
12.2.1 求砲彈射程關於發射角的函數 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 利用梯度上升優化範圍 388
12.4.1 繪製射程與發射參數的關係圖 388
12.4.2 射程函數的梯度 389
12.4.3 利用梯度尋找上坡方向 390
12.4.4 實現梯度上升 392
12.4.5 練習 395
12.5 小結 399
第 13章 用傅里葉級數分析聲波 400
13.1 聲波的組合和分解 401
13.2 用Python播放聲波 402
13.2.1 產生第 一個聲音 402
13.2.2 演奏音符 405
13.2.3 練習 406
13.3 把正弦波轉化為聲音 406
13.3.1 用正弦函數製作音頻 406
13.3.2 改變正弦函數的頻率 408
13.3.3 對聲波進行採樣和播放 409
13.3.4 練習 411
13.4 組合聲波得到新的聲波 412
13.4.1 疊加聲波的樣本來構造和弦 412
13.4.2 兩個聲波疊加後的圖形 413
13.4.3 構造正弦波的線性組合 414
13.4.4 用正弦波構造一個熟悉的函數 416
13.4.5 練習 419
13.5 將聲波分解為傅里葉級數 419
13.5.1 用內積確定向量分量 420
13.5.2 定義週期函數的內積 421
13.5.3 實現一個函數來計算傅里葉係數 423
13.5.4 求方波的傅里葉係數 424
13.5.5 其他波形的傅里葉係數 424
13.5.6 練習 426
13.6 小結 428
第三部分 機器學習的應用
第 14章 數據的函數擬合 431
14.1 衡量函數的擬合質量 433
14.1.1 計算數據與函數的距離 434
14.1.2 計算誤差的平方和 436
14.1.3 計算汽車價格函數的代價 440
14.2 探索函數空間 441
14.2.1 繪製通過原點的直線的代價442
14.2.2 所有線性函數的空間 443
14.2.3 練習 445
14.3 使用梯度下降法尋找最佳擬合線 445
14.3.1 縮放數據 445
14.3.2 找到並繪製最佳擬合線 446
14.3.3 練習 447
14.4 非線性函數擬合 448
14.4.1 理解指數函數的行為 448
14.4.2 尋找最佳擬合的指數函數 451
14.5 小結 453
第 15章 使用logistic回歸對數據分類 455
15.1 用真實數據測試分類函數 456
15.1.1 加載汽車數據 457
15.1.2 測試分類函數 458
15.1.3 練習 458
15.2 繪製決策邊界 460
15.2.1 繪製汽車的向量空間 460
15.2.2 繪製更好的決策邊界 461
15.2.3 實現分類函數 462
15.2.4 練習 463
15.3 將分類問題構造為回歸問題 464
15.3.1 縮放原始汽車數據 464
15.3.2 衡量汽車的“寶馬性” 465
15.3.3 sigmoid函數 467
15.3.4 將sigmoid函數與其他函數組合 468
15.3.5 練習 470
15.4 探索可能的logistic函數 471
15.4.1 參數化logistic函數 472
15.4.2 衡量logistic函數的擬合質量 472
15.4.3 測試不同的logistic函數 474
15.4.4 練習 475
15.5 尋找最佳logistic函數 477
15.5.1 三維中的梯度下降法 477
15.5.2 使用梯度下降法尋找最佳擬合 478
15.5.3 測試和理解最佳logistic分類器 479
15.5.4 練習 481
15.6 小結 483
第 16章 訓練神經網絡 484
16.1 用神經網絡對數據進行分類 485
16.2 手寫數字圖像分類 486
16.2.1 構建64維圖像向量 487
16.2.2 構建隨機數字分類器 488
16.2.3 測試數字分類器的表現 489
16.2.4 練習 490
16.3 設計神經網絡 491
16.3.1 組織神經元和連接 492
16.3.2 神經網絡數據流 492
16.3.3 計算激活值 495
16.3.4 用矩陣表示法計算激活值 498
16.4 用Python構建神經網絡 499
16.4.1 用Python實現MLP類 500
16.4.2 評估MLP 502
16.4.3 測試MLP的分類效果 503
16.4.4 練習 504
16.5 使用梯度下降法訓練神經網絡 504
16.5.1 將訓練構造為最小化問題 505
16.5.3 使用scikit-learn自動訓練 507
16.6 使用反向傳播計算梯度 509
16.6.1 根據最後一層的權重計算代價 509
16.6.2 利用鍊式法則計算最後一層權重的偏導數 510
16.6.3 練習 512
16.7 小結 513
附錄A 準備Python(圖靈社區下載)
附錄B Python技巧和竅門(圖靈社區下載)
附錄C 使用OpenGL和PyGame加載和渲染三維模型(圖靈社區下載)
附錄D 數學符號參考(圖靈社區下載)