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