定 價(jià):109 元
叢書(shū)名:計(jì)算機(jī)科學(xué)叢書(shū)
當(dāng)前圖書(shū)已被 63 所學(xué)校薦購(gòu)過(guò)!
查看明細(xì)
- 作者:平裝-膠訂
- 出版時(shí)間:2023/1/1
- ISBN:9787111717881
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:O241-39
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
本書(shū)面向工程和科學(xué)專業(yè)的學(xué)生,介紹編程工具和數(shù)值方法,旨在幫助學(xué)生掌握計(jì)算問(wèn)題求解技巧。書(shū)中第 一部分介紹基本的Python編程概念,使用簡(jiǎn)單的例子快速將新的概念付諸實(shí)踐;第二部分涵蓋算法和數(shù)值分析的基礎(chǔ)知識(shí),幫助學(xué)生在實(shí)際設(shè)置中快速應(yīng)用結(jié)果。
由于編程已經(jīng)成為工程、科學(xué)、醫(yī)學(xué)、媒體、商業(yè)、金融和許多其他領(lǐng)域的重要組成部分,因此對(duì)于科學(xué)家和工程師來(lái)說(shuō),掌握基本的計(jì)算機(jī)編程基礎(chǔ)是能夠提升自身競(jìng)爭(zhēng)力的。這本書(shū)向擁有不同背景的學(xué)生介紹編程,并提供編程和數(shù)學(xué)工具,這些工具將為他們的職業(yè)生涯提供非常大的幫助。
本書(shū)的大部分內(nèi)容借鑒了加州大學(xué)伯克利分校E7課程“面向科學(xué)家和工程師的計(jì)算機(jī)編程導(dǎo)論”的標(biāo)準(zhǔn)教學(xué)資料。這門(mén)課是工程學(xué)院的大多數(shù)理工科新生以及其他學(xué)科(包括物理、生物、地球和認(rèn)知科學(xué))本科生的選修課。該課程最初是用Matlab講授的,但隨著最近伯克利數(shù)據(jù)科學(xué)運(yùn)動(dòng)的趨勢(shì),數(shù)據(jù)科學(xué)部同意并支持將該課程轉(zhuǎn)變?yōu)槊嫦騊ython的課程,以便為來(lái)自不同領(lǐng)域的學(xué)生提供進(jìn)一步學(xué)習(xí)數(shù)據(jù)科學(xué)課程的預(yù)備知識(shí)。本課程有兩個(gè)基本目標(biāo):
向沒(méi)有接觸過(guò)編程的理工科學(xué)生介紹Python編程;
介紹各種用于解決科學(xué)和工程問(wèn)題的數(shù)值分析工具。
這兩個(gè)目標(biāo)反映在本書(shū)的兩個(gè)部分中:
Python編程簡(jiǎn)介;
數(shù)值方法簡(jiǎn)介。
本書(shū)是根據(jù)Timmy Siauw和Alexandre M. Bayen撰寫(xiě)的《面向工程師的MATLAB編程和數(shù)值方法導(dǎo)論》一書(shū)編寫(xiě)的。本書(shū)最初是出于交互目的而在Jupyter Notebook中編寫(xiě)的,然后轉(zhuǎn)換為L(zhǎng)aTeX。書(shū)中的大多數(shù)代碼來(lái)自Jupyter Notebook代碼單元,可以直接在筆記本單元中運(yùn)行。所有Jupyter Notebook代碼都可以在pythonnumericalmethods.berkeley.edu中找到。
因?yàn)楸緯?shū)涵蓋的主題頗為廣泛,所以沒(méi)有把每一個(gè)主題講得很深入。即使用整個(gè)學(xué)期來(lái)講本書(shū),每章也最多占用兩個(gè)課時(shí)。這本書(shū)旨在為學(xué)生提供廣泛的編程知識(shí)和數(shù)學(xué)詞匯,以供學(xué)生進(jìn)行擴(kuò)展,而非深入學(xué)習(xí)。
我們相信,就像學(xué)習(xí)一門(mén)新的外語(yǔ)一樣,學(xué)習(xí)編程也可以很有趣,而且很有啟發(fā)性。我們希望你在學(xué)習(xí)本書(shū)的過(guò)程中會(huì)贊同我們的看法。
背景知識(shí)
本書(shū)旨在向那些幾乎沒(méi)有計(jì)算機(jī)編程經(jīng)驗(yàn)的學(xué)生介紹編程和數(shù)值方法。我們希望這一宗旨能反映在本書(shū)的節(jié)奏、基調(diào)和內(nèi)容上。為了達(dá)到編程的目的,我們假設(shè)讀者具備以下背景知識(shí):
了解計(jì)算機(jī)顯示器和鍵盤(pán)、鼠標(biāo)等輸入設(shè)備;
了解在大多數(shù)操作系統(tǒng)中用于存儲(chǔ)文件的文件夾結(jié)構(gòu)。
對(duì)于本書(shū)的第二部分,我們假設(shè)讀者具備以下背景知識(shí):
高中代數(shù)和三角學(xué);
入門(mén)級(jí)大學(xué)微積分。
就是這樣了!本書(shū)中若出現(xiàn)超出上述背景知識(shí)的內(nèi)容,那必定是我們的問(wèn)題。如果因概念不明確而產(chǎn)生了知識(shí)上的混淆,我們事先表示歉意。
章節(jié)組織
第一部分介紹編程的基本概念。第1章介紹Python和Jupyter Notebook。第2~7章介紹編程的基礎(chǔ)知識(shí),熟練掌握這些章節(jié)的內(nèi)容可以獲得足夠的背景知識(shí),從而幾乎可以對(duì)任何想象的東西進(jìn)行編程。第8章介紹如何基于計(jì)算機(jī)程序運(yùn)行速度來(lái)描述程序的復(fù)雜度。第9章介紹計(jì)算機(jī)如何表示數(shù)字及其對(duì)算術(shù)運(yùn)算的影響。第10章介紹養(yǎng)成良好編程習(xí)慣的有用技巧,掌握這些技巧可以減少代碼中的錯(cuò)誤,并且易于查找錯(cuò)誤。第11章介紹如何長(zhǎng)期存儲(chǔ)數(shù)據(jù)以及如何使Python的結(jié)果在Python之外(即其他程序中)有用。第12章介紹Python的繪圖功能,可生成圖形和圖表,這對(duì)于工程師和科學(xué)家可視化結(jié)果非常有用。第13章介紹Python并行編程的基礎(chǔ)知識(shí),并行編程可利用當(dāng)今計(jì)算機(jī)的多核
設(shè)計(jì)。
第二部分概述對(duì)工程師有幫助的各種數(shù)值方法。第14章簡(jiǎn)要介紹線性代數(shù)。盡管線性代數(shù)本質(zhì)上是理論性的,但它是理解許多高級(jí)工程主題的關(guān)鍵。第15章討論特征值和特征向量(它們是工程學(xué)和科學(xué)中的重要工具),以及如何利用它們。第16章是關(guān)于最小二乘回歸的,這是一個(gè)數(shù)學(xué)術(shù)語(yǔ),是將理論模型擬合到觀測(cè)數(shù)據(jù)的一種方法。第17章是關(guān)于推斷數(shù)據(jù)點(diǎn)之間的函數(shù)值的,會(huì)介紹一種稱為“插值”的框架。第18章介紹用多項(xiàng)式近似函數(shù)的思想,這對(duì)于簡(jiǎn)化復(fù)雜函數(shù)很有用。第19章講了兩種算法,用于求函數(shù)的根,即求f(x)=0中的x,其中f是一個(gè)函數(shù)。第20章和第21章分別介紹近似函數(shù)的導(dǎo)數(shù)和積分的方法。第22章和第23章介紹一種數(shù)學(xué)模型,稱為常微分方程,這兩章著重于不同的問(wèn)題,分別是初值問(wèn)題和邊值問(wèn)題,并介紹了幾種求解方法。第24章介紹離散傅里葉變換和快速傅里葉變換的概念及其在數(shù)字信號(hào)處理中的使用。
如何閱讀此書(shū)
學(xué)習(xí)編程就是練習(xí),練習(xí),再練習(xí)。就像學(xué)習(xí)一門(mén)新語(yǔ)言一樣,如果不將其內(nèi)化并不斷加以利用,就無(wú)法真正掌握。
我們建議在閱讀本書(shū)時(shí),打開(kāi)Jupyter Notebook或交互式網(wǎng)站,并運(yùn)行書(shū)中提供的所有示例。相比于像讀小說(shuō)一樣“通讀”全文,花時(shí)間去理解每個(gè)例子中Python所做的事情,將會(huì)獲得更大的回報(bào)。
就本書(shū)而言,應(yīng)該首先閱讀并理解第1章至第5章,因?yàn)樗鼈兒w編程的基礎(chǔ)知識(shí)。第6章到第11章可以按任何順序閱讀。如果你想提高解決問(wèn)題的能力,則有關(guān)繪圖和并行編程的第12章和第13章是必讀章節(jié)。在第二部分中,應(yīng)該首先閱讀第14章,因?yàn)楹罄m(xù)各章都依賴于線性代數(shù)的概念。其余章節(jié)可以按任何順序閱讀,我們建議先閱讀第17章和第18章,再閱讀第19章和第20章。
在整本書(shū)中都有用黑體標(biāo)出的文字,當(dāng)你遇到這些文字時(shí),需要花時(shí)間記憶它們并根據(jù)上下文理解其含義。
為了使書(shū)中內(nèi)容更加清晰,我們?cè)O(shè)計(jì)了不同的文本塊。這些文本塊具有不同的功能,示例如下。
嘗試一下!這是書(shū)中最常見(jiàn)的塊,其中通常會(huì)簡(jiǎn)短地描述問(wèn)題或操作。我們強(qiáng)烈建議你在Python中“嘗試”這些內(nèi)容。
提示!該塊提供了一些建議,我們相信這些建議能使編程更容易。請(qǐng)注意,這些塊不包含理解書(shū)中關(guān)鍵概念所需的新知識(shí)。
示例:這些塊是新概念的具體示例,旨在幫助你思考新概念,但不一定需要進(jìn)行試驗(yàn)。
警告!在編程時(shí)可能會(huì)遇到很多陷阱,這些塊將幫助你避免混亂、養(yǎng)成不良習(xí)慣或誤解關(guān)鍵概念。
發(fā)生了什么?這些塊深入細(xì)節(jié),以幫助你理解Python執(zhí)行程序時(shí)發(fā)生的事情。
結(jié)構(gòu):在編程中保留了一些標(biāo)準(zhǔn)的架構(gòu),用于執(zhí)行常見(jiàn)和重要的任務(wù)。這些塊概述這些架構(gòu)并介紹如何使用它們。
每章末尾都有兩個(gè)部分。總結(jié)部分列出當(dāng)前章的要點(diǎn),這些內(nèi)容能幫助你直觀地了解剛剛所學(xué)的內(nèi)容。習(xí)題部分提供的練習(xí)將幫助你強(qiáng)化所學(xué)的概念。
最后一點(diǎn),在Python中有很多方法可以做同樣的事情。乍看這似乎是一個(gè)有用的特性,但當(dāng)任務(wù)很簡(jiǎn)單時(shí),它可能會(huì)讓學(xué)習(xí)Python變得困惑,或者因給編程新手提供過(guò)多的可能性而讓他們不知所措。本書(shū)對(duì)于要執(zhí)行的任務(wù)只提供一種方法,這樣可確保初學(xué)者少走彎路,同時(shí)也不會(huì)被無(wú)關(guān)緊要的信息所淹沒(méi)。對(duì)于某個(gè)任務(wù),你可能會(huì)發(fā)現(xiàn)不同于本書(shū)所給方法的解決方案,而且兩者解決問(wèn)題的效果相同,甚至你的方案效果更好!我們鼓勵(lì)你找到這些替代方法,并根據(jù)我們提供的工具,自己判斷哪種方法更好。
希望你喜歡這本書(shū)!
為什么選擇Python
Python是一種高級(jí)通用計(jì)算機(jī)語(yǔ)言,適用于許多應(yīng)用程序。它對(duì)初學(xué)者很友好,希望你會(huì)發(fā)現(xiàn)它簡(jiǎn)單易學(xué),并且很有趣。該語(yǔ)言本身非常靈活,這意味著在構(gòu)建功能方面沒(méi)有硬性規(guī)定,你會(huì)發(fā)現(xiàn)有多種方法可以解決相同的問(wèn)題。也許它的強(qiáng)大之處在于擁有一個(gè)強(qiáng)大的用戶社區(qū),有很多軟件包可以直接插入而且只需投入很少的精力。隨著持續(xù)流行的趨勢(shì),Python適合當(dāng)今數(shù)據(jù)科學(xué)的目標(biāo)。Python是免費(fèi)的(開(kāi)放源代碼),并且大多數(shù)軟件包也是免費(fèi)使用的。開(kāi)源編程語(yǔ)言的思想使學(xué)習(xí)曲線產(chǎn)生了巨大的變化。你不僅可以免費(fèi)使用這些軟件包,還可以從其他用戶開(kāi)發(fā)的這些軟件包的源代碼中學(xué)習(xí)許多高級(jí)技能。我們希望你能喜歡這里介紹的Python知識(shí),并在工作和生活中使用它。
Python和軟件包版本
本書(shū)是使用Python 3編寫(xiě)的。下面列出了本書(shū)中使用的軟件包及各自的版本。隨著這些軟件包的不斷開(kāi)發(fā),你可能會(huì)添加、刪除或更改軟件包的某些功能:
jupyter,1.0.0
ipython,7.5.0
numpy,1.16.4
scipy,1.2.1
h5py,2.9.0
matplotlib,3.1.0
cartopy,0.17.0
joblib,0.13.2
致 謝
Python Programming and Numerical Methods
編寫(xiě)本書(shū)初稿的時(shí)候,加州大學(xué)伯克利分校工程學(xué)教授的標(biāo)準(zhǔn)通用語(yǔ)言是Matlab,它的起源可以追溯到2005年左右。那之后便迎來(lái)了當(dāng)前的數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)時(shí)代, Python作為一種普遍使用的語(yǔ)言出現(xiàn)在整個(gè)工程行業(yè)。因此,初稿是作為加州大學(xué)伯克利分校E7課程的一部分編寫(xiě)的,該課程向?qū)W生介紹編程和數(shù)值分析。
如果沒(méi)有同事、研究生導(dǎo)師團(tuán)隊(duì)(GSI)、評(píng)分員和行政人員的幫助,這本書(shū)就永遠(yuǎn)不會(huì)寫(xiě)出來(lái),他們幫助我們完成了每學(xué)期向數(shù)百名學(xué)生講授E7課程的艱巨過(guò)程。此外,如果沒(méi)有耐心閱讀本書(shū)并給出反饋的學(xué)生的幫助,本書(shū)也將永遠(yuǎn)無(wú)法完成。在多次教授E7課程的過(guò)程中,我們與數(shù)千名學(xué)生、數(shù)十個(gè)研究生導(dǎo)師團(tuán)隊(duì)和評(píng)分員以及十幾名同事和管理人員進(jìn)行了互動(dòng),鑒于涉及的人數(shù)較多,對(duì)于那些可能遺漏的人,我們深表
歉意。
我們非常感謝同事Panos Papadopoulos、Roberto Horowitz、Michael Frenklach、Andy Packard、Tad Patzek、Jamie Rector、Raja Sengupta、Mike Cassidy和Samer Madanat教授的指導(dǎo)。尤其感謝Roberto Horowitz、Andy Packard、Sanjay Govindjee和Tad Patzek教授分享了他們?cè)谡n堂上使用的內(nèi)容,這些內(nèi)容對(duì)本書(shū)的編寫(xiě)做出了貢獻(xiàn)。我們還要感謝Rob Harley和Sanjay Govindjee教授在教授E7課程時(shí)使用了本書(shū)的初稿,并向我們提供了有助于改進(jìn)的反饋。課程的順利進(jìn)行,讓作者有了編寫(xiě)本書(shū)的時(shí)間和精力。眾多行政人員承擔(dān)了大量后勤工作,使課程的管理井井有條。我們特別感謝Joan Chamberlain、Shelley Okimoto、Jenna Tower和Donna Craig。
特別值得一提的是,土木與環(huán)境工程系副主任Bill Nazaroff在2011年指定第二作者授課。如果沒(méi)有這項(xiàng)任務(wù),這本書(shū)的幾位作者就沒(méi)有機(jī)會(huì)一起工作并撰寫(xiě)本書(shū)。眾所周知,E7課程是加州大學(xué)伯克利分校工程學(xué)院最難教的課程。然而,在我們教授這門(mén)課的多個(gè)學(xué)期里,課程一直順利進(jìn)行,這主要?dú)w功于我們有幸與才華橫溢的研究生導(dǎo)師團(tuán)隊(duì)合作。這幾年在授課的過(guò)程中,一系列具有傳奇色彩的研究生導(dǎo)師團(tuán)隊(duì)負(fù)責(zé)人為塑造課程做出了貢獻(xiàn),并為學(xué)生提供了有意義的體驗(yàn)。特別是Scott Payne、James Lew、Claire Saint-Pierre、Kristen Paris
譯者序
前言
致謝
第一部分 Python編程簡(jiǎn)介
第1章 Python基礎(chǔ) 2
1.1 開(kāi)始使用Python 2
1.1.1 設(shè)置工作環(huán)境 2
1.1.2 運(yùn)行Python代碼的
三種方法 5
1.2 Python作為計(jì)算器 7
1.3 包管理 11
1.3.1 使用包管理器管理包 11
1.3.2 從源代碼中安裝包 13
1.4 Jupyter Notebook簡(jiǎn)介 13
1.4.1 啟動(dòng)Jupyter Notebook 14
1.4.2 筆記本 15
1.4.3 如何關(guān)閉筆記本 15
1.4.4 關(guān)閉Jupyter Notebook
服務(wù)器 15
1.5 邏輯表達(dá)式和運(yùn)算符 16
1.6 總結(jié)和習(xí)題 18
1.6.1 總結(jié) 18
1.6.2 習(xí)題 18
第2章 變量和基本數(shù)據(jù)結(jié)構(gòu) 20
2.1 變量和賦值 20
2.2 數(shù)據(jù)結(jié)構(gòu)—字符串 22
2.3 數(shù)據(jù)結(jié)構(gòu)—列表 26
2.4 數(shù)據(jù)結(jié)構(gòu)—元組 28
2.5 數(shù)據(jù)結(jié)構(gòu)—集合 30
2.6 數(shù)據(jù)結(jié)構(gòu)—字典 31
2.7 numpy數(shù)組 33
2.8 總結(jié)和習(xí)題 40
2.8.1 總結(jié) 40
2.8.2 習(xí)題 40
第3章 函數(shù) 42
3.1 函數(shù)基礎(chǔ) 42
3.1.1 Python 內(nèi)置函數(shù) 42
3.1.2 定義自己的函數(shù) 42
3.2 局部變量和全局變量 49
3.3 嵌套函數(shù) 52
3.4 lambda函數(shù) 53
3.5 函數(shù)作為函數(shù)的參數(shù) 54
3.6 總結(jié)和習(xí)題 55
3.6.1 總結(jié) 55
3.6.2 習(xí)題 55
第4章 分支語(yǔ)句 59
4.1 if-else語(yǔ)句 59
4.2 三元運(yùn)算符 65
4.3 總結(jié)和習(xí)題 65
4.3.1 總結(jié) 65
4.3.2 習(xí)題 65
第5章 迭代 69
5.1 for循環(huán) 69
5.2 while循環(huán) 74
5.3 推導(dǎo)式 76
5.3.1 列表推導(dǎo)式 76
5.3.2 字典推導(dǎo)式 77
5.4 總結(jié)和習(xí)題 77
5.4.1 總結(jié) 77
5.4.2 習(xí)題 77
第6章 遞歸 81
6.1 遞歸函數(shù) 81
6.2 分而治之 85
6.2.1 漢諾塔問(wèn)題 85
6.2.2 快速排序 87
6.3 總結(jié)和習(xí)題 88
6.3.1 總結(jié) 88
6.3.2 習(xí)題 89
第7章 面向?qū)ο缶幊獭?4
7.1 面向?qū)ο缶幊毯?jiǎn)介 94
7.2 類和對(duì)象 95
7.2.1 類 95
7.2.2 對(duì)象 97
7.2.3 類屬性與實(shí)例屬性 98
7.3 繼承、封裝和多態(tài) 99
7.3.1 繼承 99
7.3.2 封裝 102
7.3.3 多態(tài) 103
7.4 總結(jié)和習(xí)題 103
7.4.1 總結(jié) 103
7.4.2 習(xí)題 103
第8章 復(fù)雜度 105
8.1 復(fù)雜度和大O表示法 105
8.2 復(fù)雜度問(wèn)題 107
8.3 分析器 108
8.3.1 使用魔術(shù)命令 108
8.3.2 使用Python分析器 109
8.3.3 使用line分析器 110
8.4 總結(jié)和習(xí)題 111
8.4.1 總結(jié) 111
8.4.2 習(xí)題 111
第9章 數(shù)字的表示 113
9.1 baseN和二進(jìn)制 113
9.2 浮點(diǎn)數(shù) 114
9.3 舍入誤差 118
9.3.1 表示誤差 118
9.3.2 浮點(diǎn)運(yùn)算導(dǎo)致的舍入誤差 118
9.3.3 舍入誤差的累積 119
9.4 總結(jié)和習(xí)題 120
9.4.1 總結(jié) 120
9.4.2 習(xí)題 120
第10章 錯(cuò)誤、良好的編程實(shí)踐
和調(diào)試 123
10.1 錯(cuò)誤類型 123
10.2 避免錯(cuò)誤 125
10.2.1 規(guī)劃你的程序 125
10.2.2 經(jīng)常進(jìn)行測(cè)試 126
10.2.3 保持代碼整潔 126
10.3 異!128
10.4 類型檢查 130
10.5 調(diào)試 132
10.5.1 在遇到異常時(shí)激活
調(diào)試器 132
10.5.2 在運(yùn)行代碼前激活
調(diào)試器 134
10.5.3 添加斷點(diǎn) 135
10.6 總結(jié)和習(xí)題 136
10.6.1 總結(jié) 136
10.6.2 習(xí)題 136
第11章 讀寫(xiě)數(shù)據(jù) 137
11.1 文本文件 137
11.1.1 寫(xiě)入文件 137
11.1.2 附加文件 138
11.1.3 讀取文件 138
11.1.4 處理數(shù)字和數(shù)組 139
11.2 CSV文件 140
11.2.1 寫(xiě)入和打開(kāi)CSV文件 141
11.2.2 讀取CSV文件 142
11.2.3 numpy之外 142
11.3 pickle文件 142
11.3.1 寫(xiě)入pickle文件 142
11.3.2 讀取pickle文件 143
11.3.3 讀取Python 2的pickle
文件 143
11.4 JSON文件 143
11.4.1 JSON格式 143
11.4.2 寫(xiě)入JSON文件 144
11.4.3 讀取JSON文件 144
11.5 HDF5文件 145
11.5.1 讀取HDF5文件 146
11.6 總結(jié)和習(xí)題 147
11.6.1 總結(jié) 147
11.6.2 習(xí)題 147
第12章 可視化和繪圖 148
12.1 二維繪圖 148
12.2 三維繪圖 156
12.3 使用地圖 161
12.4 動(dòng)畫(huà)和電影 165
12.5 總結(jié)和習(xí)題 167
12.5.1 總結(jié) 167
12.5.2 習(xí)題 167
第13章 Python并行化 173
13.1 并行計(jì)算基礎(chǔ)知識(shí) 173
13.1.1 進(jìn)程和線程 174
13.1.2 Python的GIL問(wèn)題 174
13.1.3 使用并行計(jì)算的缺點(diǎn) 174
13.2 多進(jìn)程 174
13.2.1