機(jī)器學(xué)習(xí)原理與應(yīng)用課件 第1章 概述_第1頁(yè)
機(jī)器學(xué)習(xí)原理與應(yīng)用課件 第1章 概述_第2頁(yè)
機(jī)器學(xué)習(xí)原理與應(yīng)用課件 第1章 概述_第3頁(yè)
機(jī)器學(xué)習(xí)原理與應(yīng)用課件 第1章 概述_第4頁(yè)
機(jī)器學(xué)習(xí)原理與應(yīng)用課件 第1章 概述_第5頁(yè)
已閱讀5頁(yè),還剩145頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第1章

概述學(xué)習(xí)目標(biāo)了解機(jī)器學(xué)習(xí)的定義、發(fā)展史與趨勢(shì)掌握機(jī)器學(xué)習(xí)基本原理、數(shù)學(xué)本質(zhì)與基本術(shù)語(yǔ)掌握機(jī)器學(xué)習(xí)相關(guān)庫(kù)的使用方法。123目錄頁(yè)1.1定義1.2發(fā)展歷程與趨勢(shì)1.3基本原理與術(shù)語(yǔ)1.4數(shù)學(xué)本質(zhì)1.5基本術(shù)語(yǔ)1.6常用庫(kù)概述1.1定義機(jī)器學(xué)習(xí)是利用特定的方法從歷史數(shù)據(jù)或觀測(cè)數(shù)據(jù)中發(fā)現(xiàn)規(guī)律或知識(shí)并利用所發(fā)現(xiàn)的規(guī)律或知識(shí)對(duì)新數(shù)據(jù)形態(tài)或相關(guān)問(wèn)題的求解結(jié)果進(jìn)行預(yù)測(cè)的技術(shù),由于數(shù)據(jù)中蘊(yùn)含的規(guī)律或知識(shí)在數(shù)學(xué)形式上可表達(dá)為特定的函數(shù)或模型,因而通常也可以將機(jī)器學(xué)習(xí)所解決的問(wèn)題表述為利用已知數(shù)據(jù)求解特定或未知數(shù)學(xué)模型的問(wèn)題。1.1定義知識(shí)或規(guī)律(數(shù)學(xué)模型)已知觀測(cè)數(shù)據(jù)機(jī)器學(xué)習(xí)算法新數(shù)據(jù)預(yù)測(cè)結(jié)果機(jī)器學(xué)習(xí)基本過(guò)程課程思政著名學(xué)者赫伯特?西蒙教授(HerbertSimon,1975年圖靈獎(jiǎng)獲得者、1978年諾貝爾經(jīng)濟(jì)學(xué)獎(jiǎng)獲得者)將“學(xué)習(xí)”定義為“如果某個(gè)系統(tǒng)能通過(guò)執(zhí)行某個(gè)過(guò)程改進(jìn)其性能,則這個(gè)過(guò)程就是學(xué)習(xí)”,因而,學(xué)習(xí)的核心目的就是改善性能。其實(shí),對(duì)人類而言,此定義也是適用的;例如,我們現(xiàn)在正在學(xué)習(xí)“機(jī)器學(xué)習(xí)”的知識(shí),其本質(zhì)目的就是為了提升自己在機(jī)器學(xué)習(xí)方面的認(rèn)知水平。如果僅僅是低層次的重復(fù)性學(xué)習(xí),而沒(méi)有達(dá)到認(rèn)知升級(jí)的目的,那么即使表面看起來(lái)非常勤奮(比如天天去圖書(shū)館上自習(xí)),其實(shí)也僅僅是個(gè)“偽學(xué)習(xí)者”,因?yàn)檫@樣的“我們”并沒(méi)有改善性能。按照這個(gè)解釋,毛澤東主席那句著名的口號(hào)“好好學(xué)習(xí),天天向上”就會(huì)煥發(fā)新的含義:如果沒(méi)有性能上的“向上”,即使非常辛苦地“好好”,即使長(zhǎng)時(shí)間的“天天”,都無(wú)法視為“學(xué)習(xí)”。殊途同歸,無(wú)論是“人類學(xué)習(xí)”,還是“機(jī)器學(xué)習(xí)”,提高性能、改善自己,才是關(guān)鍵。1.2發(fā)展歷程與趨勢(shì)在1950年,“計(jì)算機(jī)科學(xué)之父”圖靈(Turing)發(fā)表“ComputingMachineryandIntelligence”論文,提出了著名的圖靈測(cè)試(如果一臺(tái)機(jī)器能夠通過(guò)與人類進(jìn)行對(duì)話且在對(duì)話中表現(xiàn)出與人類相似的智能,那么可以說(shuō)這臺(tái)機(jī)器具有智能),探討了機(jī)器是否能夠思考和具有智能的可能性。幾十年來(lái),科研人員圍繞機(jī)器智能、學(xué)習(xí)等問(wèn)題進(jìn)行深入的探索與研究,先后涌現(xiàn)出符號(hào)主義、連接主義等學(xué)派以及統(tǒng)計(jì)學(xué)習(xí)與深度學(xué)習(xí)等方法,極大地推動(dòng)了人工智能、不同類型的海量數(shù)據(jù)之間快速、協(xié)同發(fā)展。1.2.1

發(fā)展歷程時(shí)間段發(fā)展時(shí)期主流技術(shù)20世紀(jì)50年代初至70年代初推理期運(yùn)用基于符號(hào)知識(shí)表示的演繹推理技術(shù)。20世紀(jì)70年代中期至80年代知識(shí)期基于符號(hào)知識(shí)表示,通過(guò)獲取和利用領(lǐng)域知識(shí)來(lái)建立專家系統(tǒng)。20世紀(jì)80年代至今學(xué)習(xí)期兩大主流技術(shù)分別是符號(hào)主義學(xué)習(xí)和基于神經(jīng)網(wǎng)絡(luò)的連接主義學(xué)習(xí)。1.2.2發(fā)展趨勢(shì)1.深度學(xué)習(xí)深度學(xué)習(xí)利用深層次的神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)數(shù)據(jù)不同層次特征的提取,進(jìn)而可解決人工設(shè)計(jì)特征可靠性低、需要專家知識(shí)等局限;其中,底層特征表達(dá)對(duì)象的細(xì)節(jié)或局部信息,而高層特征則表達(dá)對(duì)象整體或全局信息,通常由不同類型的底層特征通過(guò)不同方式的組合或抽象而構(gòu)成。在深度學(xué)習(xí)的驅(qū)動(dòng)下,人們?cè)谟?jì)算機(jī)視覺(jué)、語(yǔ)音處理、自然語(yǔ)言等方面相繼取得了巨大的突破,達(dá)到或甚至超過(guò)了人類的水平。深度學(xué)習(xí)的成功主要?dú)w功于大數(shù)據(jù)、大模型與大計(jì)算三大因素,近年來(lái),循環(huán)神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)、殘差神經(jīng)網(wǎng)絡(luò)、自動(dòng)編碼解碼器等不同類型的深度學(xué)習(xí)框架或模型層出不窮,極大地推動(dòng)了人工智能技術(shù)的發(fā)展。1.2.2發(fā)展趨勢(shì)2.強(qiáng)化學(xué)習(xí)強(qiáng)化學(xué)習(xí)通過(guò)機(jī)器與環(huán)境進(jìn)行動(dòng)態(tài)交互或“試錯(cuò)”的方式獲得獎(jiǎng)賞以指導(dǎo)行為,進(jìn)而最大化地累積獎(jiǎng)賞以確定學(xué)習(xí)的最佳行為或獲取最優(yōu)的模型。2016年3月,基于深度卷積神經(jīng)網(wǎng)絡(luò)與強(qiáng)化學(xué)習(xí)設(shè)計(jì)的AlphaGo以4:1的比分擊敗頂尖職業(yè)棋手,成為第一個(gè)不借助讓子而擊敗圍棋職業(yè)九段棋手的電腦程序。此次比賽成為人工智能歷史上里程碑式的事件,也讓強(qiáng)化學(xué)習(xí)成為機(jī)器學(xué)習(xí)領(lǐng)域的熱點(diǎn)研究方向。1.2.2發(fā)展趨勢(shì)3.遷移學(xué)習(xí)遷移學(xué)習(xí)旨在將針對(duì)其他任務(wù)(或源任務(wù))訓(xùn)練好的模型遷移至新的學(xué)習(xí)任務(wù)(或目標(biāo)任務(wù))中,進(jìn)而幫助新任務(wù)解決訓(xùn)練樣本不足、訓(xùn)練效率較低等問(wèn)題。其根本原理在于不同學(xué)習(xí)任務(wù)之間存在一定的相關(guān)性(如狗兔識(shí)別與貓羊識(shí)別)或者相關(guān)數(shù)據(jù)中蘊(yùn)含相近的規(guī)律或知識(shí),因而可實(shí)現(xiàn)規(guī)律或知識(shí)的推廣與應(yīng)用(如會(huì)騎摩托車的選手可很快掌握騎自行車的方法)。1.2.2發(fā)展趨勢(shì)4.對(duì)抗學(xué)習(xí)對(duì)抗學(xué)習(xí)利用博弈思想或?qū)剐孕袨椋ㄈ绠a(chǎn)生對(duì)抗樣本或者對(duì)抗模型)加強(qiáng)模型的穩(wěn)定性,提高數(shù)據(jù)生成的可靠性,如由生成器與判別器(分別用于生成樣本與判別樣本的真?zhèn)危?gòu)成的生成式對(duì)抗神經(jīng)網(wǎng)絡(luò)被成功應(yīng)用到圖像、語(yǔ)音、文本等領(lǐng)域,成為無(wú)監(jiān)督學(xué)習(xí)的重要技術(shù)之一。1.2.2發(fā)展趨勢(shì)5.對(duì)偶學(xué)習(xí)對(duì)偶學(xué)習(xí)基本思想在于利用學(xué)習(xí)任務(wù)之間的對(duì)偶屬性獲得有效的反饋/正則化,進(jìn)而引導(dǎo)、加強(qiáng)學(xué)習(xí)過(guò)程,降低深度學(xué)習(xí)對(duì)大規(guī)模人工標(biāo)注數(shù)據(jù)的依賴。對(duì)偶學(xué)習(xí)已被應(yīng)用于機(jī)器翻譯、圖像風(fēng)格轉(zhuǎn)換、問(wèn)題回答和生成、圖像分類和生成、圖像轉(zhuǎn)文本與文本轉(zhuǎn)圖像等諸多任務(wù)中并取得較好的效果。1.2.2發(fā)展趨勢(shì)6.分布式學(xué)習(xí)分布式機(jī)器學(xué)習(xí)利用多個(gè)計(jì)算節(jié)點(diǎn)進(jìn)行機(jī)器學(xué)習(xí)模型的訓(xùn)練,通過(guò)數(shù)據(jù)并行、模型并行與混合并行等方式實(shí)現(xiàn)大數(shù)據(jù)、大模型等計(jì)算密集型任務(wù)的求解,是目前人工智能領(lǐng)域的主流方向之一。1.2.2發(fā)展趨勢(shì)7.元學(xué)習(xí)元學(xué)習(xí)是近年來(lái)機(jī)器學(xué)習(xí)領(lǐng)域的研究熱點(diǎn),其目在于讓機(jī)器學(xué)會(huì)如何進(jìn)行學(xué)習(xí)或理解學(xué)習(xí)本身的思想與方法,而不僅僅是利用特定的數(shù)據(jù)完成特定的學(xué)習(xí)任務(wù);通俗而言,元學(xué)習(xí)旨在讓機(jī)器具備舉一反三的智商而非生搬硬套地解決指定問(wèn)題,在此情況下,元學(xué)習(xí)器需要能夠評(píng)估當(dāng)前的學(xué)習(xí)思想與方法并能根據(jù)學(xué)習(xí)任務(wù)對(duì)自己的學(xué)習(xí)思想與方法進(jìn)行有效調(diào)整。1.3基本原理與術(shù)語(yǔ)思考:“一朝被蛇咬,十年怕草繩”的內(nèi)在原因?提示:1.蛇與繩之間有什么關(guān)聯(lián)?2.人被蛇咬后獲得什么啟發(fā)?1.3.1基本原理十年后新數(shù)據(jù)[繩]特征

蛇|繩?十年前數(shù)據(jù)[蛇]

特征(如細(xì)長(zhǎng)、紅色)知識(shí)(規(guī)律):有此特征的動(dòng)物咬人!1.3.1基本原理Y=f(X)特征:X知識(shí)(規(guī)律):f蛇/繩?:Y1.3.1基本原理實(shí)例1-1:已知表1-2所示8只兔子的數(shù)量與食量數(shù)據(jù),可以預(yù)測(cè)9只兔子的食量嗎?

表1-2兔子數(shù)量與食量此問(wèn)題是機(jī)器學(xué)習(xí)中經(jīng)典的回歸問(wèn)題。數(shù)量食量(千克)10.220.530.8……1.3.1基本原理實(shí)例1-1:以兔子數(shù)量與食量分別為??、??坐標(biāo)軸建立坐標(biāo)系,則將表1-2所示的8只兔子的數(shù)量與食量數(shù)據(jù)進(jìn)行可視化時(shí),相應(yīng)的數(shù)據(jù)點(diǎn)(黑點(diǎn))近似呈現(xiàn)逐步上升的趨勢(shì);因而可以通過(guò)2個(gè)點(diǎn)求取相關(guān)直線??_1:??=????+??,進(jìn)而再求取??=9時(shí)的??值即可確定9只兔子的食量(即??=1.5千克)1.3.1基本原理實(shí)例1-2:已知表1-3所示狗與兔的尾巴與耳朵比例特征,可以根據(jù)指定尾巴與耳朵比例特征預(yù)測(cè)出相應(yīng)的狗或兔類別嗎?表1-3狗與兔的尾巴和耳朵特征值此問(wèn)題是機(jī)器學(xué)習(xí)中經(jīng)典的分類問(wèn)題。(尾巴,耳朵)類別(0.06,0.9)兔(0.4,0.06)狗(0.08,0.92)兔……1.3.1基本原理

1.3.2關(guān)鍵術(shù)語(yǔ)1.特征原始數(shù)據(jù)通常是并不以連續(xù)變量或離散變量的形式存在或者對(duì)模型的求解并非全部可用,因此需要根據(jù)當(dāng)前問(wèn)題所涉及的對(duì)象(如狗與兔的分類)抽取原始數(shù)據(jù)中具有代表性的部分(如耳朵、尾巴比例等),進(jìn)而將多個(gè)可以表征原始數(shù)據(jù)的數(shù)值型特征組合為向量的形式(稱為特征向量)用于模型的求解。1.3.2關(guān)鍵術(shù)語(yǔ)1.特征

針對(duì)特定的應(yīng)用提取相應(yīng)特征向量的意義在于:(1)降低數(shù)據(jù)維度:通過(guò)提取特征向量,可在一定程度上降低原始數(shù)據(jù)的維度以簡(jiǎn)化模型的復(fù)雜度,進(jìn)而提高模型訓(xùn)練的效率。(2)提升模型性能:優(yōu)良的特征可有效表達(dá)原始數(shù)據(jù)蘊(yùn)含的與當(dāng)前問(wèn)題求解最為相關(guān)的信息,有利于提高整體模型的性能。1.3.2關(guān)鍵術(shù)語(yǔ)2.樣本在機(jī)器學(xué)習(xí)中,樣本與樣本集主要用于模型的求解。在模型的求解中,樣本通常劃分為以下三個(gè)部分:(1)訓(xùn)練樣本:用于模型的求解,其數(shù)量通常不低于樣本總數(shù)的一半(2)驗(yàn)證樣本:用于衡量模型訓(xùn)練或模型參數(shù)優(yōu)化時(shí)的性能變化(3)測(cè)試樣本:用于衡量最終模型的性能1.3.2關(guān)鍵術(shù)語(yǔ)2.樣本1.3.2關(guān)鍵術(shù)語(yǔ)3.監(jiān)督學(xué)習(xí)監(jiān)督學(xué)習(xí)使用已標(biāo)注觀測(cè)數(shù)據(jù)(如狗兔分類模型構(gòu)建時(shí),在所用到的每幅圖像中均將狗或貓所在區(qū)域標(biāo)示出來(lái))求取輸入特征向量與輸出值之間的映射函數(shù)。如例1與例2所示分類與回歸問(wèn)題,其均通過(guò)監(jiān)督學(xué)習(xí)的方式進(jìn)行求解,相關(guān)模型的輸出值分別為實(shí)型數(shù)值(如兔的食量)與分類標(biāo)記(如利用0與1分別代表狗與兔的類別)。1.3.2關(guān)鍵術(shù)語(yǔ)4.無(wú)監(jiān)督學(xué)習(xí)無(wú)監(jiān)督學(xué)習(xí)利用未標(biāo)注的觀測(cè)數(shù)據(jù)(即觀測(cè)數(shù)據(jù)相應(yīng)的輸出值未知)實(shí)現(xiàn)模型的求解,如樣本聚類(將具有相同特征的樣本聚為一類以使同類樣本相似度較高而異類樣本相似度較低)、關(guān)聯(lián)規(guī)則分析(從數(shù)據(jù)中發(fā)現(xiàn)事物之間的關(guān)聯(lián)或事物共現(xiàn)的概率)等。一般而言,監(jiān)督學(xué)習(xí)是簡(jiǎn)單、高效的,而非監(jiān)督學(xué)習(xí)則更加有用;其主要原因在于人工標(biāo)注樣本不但費(fèi)時(shí)、費(fèi)力且精度難以得到保證,而且對(duì)特定領(lǐng)域數(shù)據(jù)(如醫(yī)學(xué)與遙感圖像)的標(biāo)注需要業(yè)務(wù)熟練的專家參與或在求解稀有對(duì)象分類或識(shí)別問(wèn)題時(shí)不易進(jìn)行標(biāo)注。1.3.2關(guān)鍵術(shù)語(yǔ)5.半監(jiān)督學(xué)習(xí)半監(jiān)督學(xué)習(xí)僅利用部分已標(biāo)注觀測(cè)數(shù)據(jù)實(shí)現(xiàn)模型的求解。在實(shí)際中,半監(jiān)督學(xué)習(xí)不但可有效減少人工的參與,而且可保證模型求解的可靠性。1.3.2關(guān)鍵術(shù)語(yǔ)6.泛化泛化是指機(jī)器學(xué)習(xí)模型在學(xué)習(xí)過(guò)程中遇見(jiàn)新樣本時(shí)候的表現(xiàn),泛化能力是指機(jī)器學(xué)習(xí)模型對(duì)未知數(shù)據(jù)的預(yù)測(cè)能力;在實(shí)際中通常采用誤差、精度等標(biāo)準(zhǔn)評(píng)價(jià)機(jī)器學(xué)習(xí)模型的泛化能力,泛化能力較高的機(jī)器學(xué)習(xí)模型對(duì)問(wèn)題領(lǐng)域內(nèi)的訓(xùn)練數(shù)據(jù)及新數(shù)據(jù)的預(yù)測(cè)精度均較高。1.3.2關(guān)鍵術(shù)語(yǔ)7.擬合擬合是指當(dāng)前函數(shù)以指定標(biāo)準(zhǔn)逼近數(shù)據(jù)點(diǎn)的程度,形象地可表述為函數(shù)曲線(或模型)在指定標(biāo)準(zhǔn)下距離數(shù)據(jù)點(diǎn)的遠(yuǎn)近。根據(jù)數(shù)據(jù)點(diǎn)分布、數(shù)量及標(biāo)準(zhǔn)的不同,擬合分為欠擬合、過(guò)擬合與好擬合三種。1.3.2關(guān)鍵術(shù)語(yǔ)8.判別函數(shù)特征向量在特征空間表現(xiàn)為一個(gè)點(diǎn)(如(尾巴,耳朵)特征向量(0.87,0.99)),而為了對(duì)特征空間中的點(diǎn)進(jìn)行分類(如狗與兔的分類),通常需要確定一個(gè)超平面將特征空間分為互不重疊的子區(qū)域以使得不同類別的點(diǎn)分布于不同的子區(qū)域中。超平面由判別函數(shù)確定,超平面上的點(diǎn)對(duì)應(yīng)判別函數(shù)輸出值為零或超平面由滿足判別函數(shù)輸出值為零的點(diǎn)構(gòu)成。根據(jù)判別函數(shù),可以有效地判定新數(shù)據(jù)對(duì)應(yīng)的特征向量在特征空間中位于哪個(gè)區(qū)域,進(jìn)而確定其相應(yīng)的類別。1.3.2關(guān)鍵術(shù)語(yǔ)9.模型訓(xùn)練機(jī)器學(xué)習(xí)模型的訓(xùn)練(或模型參數(shù)的求?。┻^(guò)程一般包括以下幾個(gè)步驟:(1)特征提?。簭臄?shù)據(jù)中提取與問(wèn)題求解相關(guān)的特征以生成樣本集。(2)劃分樣本:將樣本分成訓(xùn)練樣本、驗(yàn)證樣本和測(cè)試樣本三部分。(3)模型構(gòu)建:使用訓(xùn)練樣本與驗(yàn)證樣本構(gòu)建模型。(4)測(cè)試模型:使用測(cè)試樣本驗(yàn)證模型的性能。(5)優(yōu)化模型:通過(guò)更多數(shù)據(jù)、特征與算法對(duì)模型進(jìn)行優(yōu)化。1.4數(shù)學(xué)本質(zhì)在圖1-2所示的機(jī)器學(xué)習(xí)問(wèn)題中,從數(shù)學(xué)角度而言,根據(jù)觀測(cè)數(shù)據(jù)所求取的規(guī)律(或知識(shí))其實(shí)為直線L_1與L_2(數(shù)學(xué)函數(shù)或模型)如何確定最優(yōu)的直線L_1與L_2呢?如在圖1-2(a)所示的回歸問(wèn)題中,雖然兩點(diǎn)可確定一條直線,但選擇哪兩點(diǎn)是最優(yōu)(如虛線所示直線并非最優(yōu))的呢?而在圖1-2(b)所示的分類問(wèn)題中,如何確定最優(yōu)直線(如虛線所示直線也并非最優(yōu))以準(zhǔn)確地對(duì)“狗”或“兔”類別進(jìn)行分類呢?以上問(wèn)題最終可轉(zhuǎn)化為數(shù)學(xué)上的最優(yōu)化問(wèn)題進(jìn)行求解。1.4.1模型定義

1.4.1模型定義

1.4.1模型定義

1.4.1模型定義

1.4.2模型求解

1.5Python語(yǔ)言基礎(chǔ)Python語(yǔ)言是一種解釋型、面向?qū)ο?、?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言,可融合多種科學(xué)計(jì)算、數(shù)據(jù)分析與可視化等第三方開(kāi)源庫(kù),特別適于機(jī)器學(xué)習(xí)算法的研究與學(xué)習(xí)。下載地址:https://1.5.1概述Python語(yǔ)言由荷蘭人吉多·范羅蘇姆(GuidovanRossum)于1989年圣誕節(jié)期間開(kāi)始研發(fā)并于1991年發(fā)布Python語(yǔ)言的第一個(gè)公開(kāi)版。2000年10月,Python2.0發(fā)布,2010年,Python2.x系列發(fā)布了最后一個(gè)版本后退出歷史舞臺(tái)。2008年12月,Python3.0版本發(fā)布,解釋器內(nèi)部完全采用面向?qū)ο蟮姆绞綄?shí)現(xiàn)。Python3.0版本與Python2.x系列版本并不兼容。2022年10月24日,Python3.11.0版本發(fā)布。本書(shū)機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn)Python3.7及以上版本。1.5.1概述Python語(yǔ)言具有以下優(yōu)點(diǎn):簡(jiǎn)單易懂,容易入門(mén)。Python語(yǔ)言的哲學(xué)是簡(jiǎn)單優(yōu)雅,盡量寫(xiě)容易看明白的代碼,少的代碼。開(kāi)發(fā)效率高。Python語(yǔ)言具有豐富的第三方庫(kù),覆蓋了網(wǎng)絡(luò)、文件、GUI、數(shù)據(jù)庫(kù)、文本等大量?jī)?nèi)容。開(kāi)發(fā)者可以直接調(diào)用,大大降低開(kāi)發(fā)周期。無(wú)需關(guān)注底層細(xì)節(jié)。作為一種高級(jí)語(yǔ)言,在編程時(shí)無(wú)需關(guān)注底層細(xì)節(jié)(如內(nèi)存管理等)。功能強(qiáng)大。Python語(yǔ)言可用于前端、后端各類應(yīng)用或模塊的開(kāi)發(fā),功能強(qiáng)大。可移植性。Python語(yǔ)言作為一種解釋型語(yǔ)言,可以在任何安裝有Python解釋器的平臺(tái)執(zhí)行。1.5.1概述常用的Python語(yǔ)言開(kāi)發(fā)環(huán)境包括PyCharm或Spyder兩種。(1)PyCharmPyCharm是由JetBrains打造的一款Python語(yǔ)言開(kāi)發(fā)環(huán)境,支持MacOS、Windows與Linux等操作系統(tǒng),同時(shí)提供調(diào)試、語(yǔ)法高亮、項(xiàng)目管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試與版本控制等功能,可有效提高Python語(yǔ)言編程的效率。PyCharm下載地址:/pycharm/download/。1.5.1概述常用的Python語(yǔ)言開(kāi)發(fā)環(huán)境包括PyCharm或Spyder兩種。(2)SpyderSpyder是一個(gè)強(qiáng)大的交互式Python語(yǔ)言開(kāi)發(fā)環(huán)境,支持Windows、Linux與OSX等操作系統(tǒng),同時(shí)提供代碼編輯、交互測(cè)試、調(diào)試等功能。與其他Python語(yǔ)言開(kāi)發(fā)環(huán)境相比,Spyder最大的優(yōu)點(diǎn)就是模仿MATLAB的“工作空間”功能,可以很方便地觀察與修改數(shù)組的值。Spyder下載地址:/。1.5.2基本語(yǔ)法(1)變量變量一般是指值可以變化的量,變量在內(nèi)存中創(chuàng)建以用來(lái)保存和表示數(shù)據(jù)。在Python語(yǔ)言中,變量名及其類型不需要事先聲明,賦值語(yǔ)句可以直接創(chuàng)建任意類型的變量。等號(hào)(=)運(yùn)算符用來(lái)給變量賦值,其左邊是變量名,右邊是存儲(chǔ)在變量中的值(如a=1)。Python語(yǔ)言允許同時(shí)為多個(gè)變量賦值(如a=b=c=1或a,b,c=1,2,"join")。1.5.2基本語(yǔ)法(1)變量在Python語(yǔ)言中定義變量名(同樣適用于函數(shù)名、類名等用戶自定義的符號(hào)和名稱)的時(shí)候,需要遵守以下的規(guī)范。①變量名只能包含字母、數(shù)字和下劃線,且不能以數(shù)字開(kāi)頭。②變量名不能有空格或標(biāo)點(diǎn)符號(hào)。③不能將Python語(yǔ)言關(guān)鍵字作變量名。④變量名對(duì)英文字母的大小寫(xiě)敏感(如Machine和machine是不同的變量)。1.5.2基本語(yǔ)法(1)變量常用變量名稱命名方法:小駝峰式命名法:第一個(gè)單詞以小寫(xiě)字母開(kāi)始,第二個(gè)單詞的首字母大寫(xiě)(如myName)。大駝峰式命名法:每一個(gè)單字的首字母都采用大寫(xiě)字母(如FirstName)。用下劃線“_”來(lái)連接所有的單詞(如send_buf)。

1.5.2基本語(yǔ)法(2)關(guān)鍵字關(guān)鍵字只允許表達(dá)特定的語(yǔ)義,不允許通過(guò)任何方式改變其含義,也不能用來(lái)做變量名、函數(shù)名或類名等標(biāo)識(shí)符。在Python語(yǔ)言開(kāi)發(fā)環(huán)境中,導(dǎo)入模塊keyword之后,可以使用print(keyword.kwlist)查看所有關(guān)鍵字。1.5.2基本語(yǔ)法關(guān)鍵字含義關(guān)鍵字含義False比較操作返回的結(jié)果,F(xiàn)alse與0相同await聲明程序掛起and邏輯與操作del刪除變量或序列的值as類型轉(zhuǎn)換elifif…else條件語(yǔ)句assert判斷變量或條件表達(dá)式的值是否為真elseif…else條件語(yǔ)句break中斷循環(huán)語(yǔ)句的執(zhí)行except異常捕獲class定義類nonlocal在嵌套函數(shù)中聲明一個(gè)非局部變量continue繼續(xù)執(zhí)行下一次循環(huán)forfor循環(huán)語(yǔ)句def定義函數(shù)或方法finally異常捕獲from與import結(jié)合導(dǎo)入模塊ifif…else條件語(yǔ)句global定義全局變量import與from結(jié)合導(dǎo)入模塊in判斷變量是否在序列中not邏輯非操作is判斷變量是否為某個(gè)類的實(shí)例or邏輯或操作lambda定義匿名函數(shù)pass空的類、方法或函數(shù)的占位符raise異常拋出操作try包含可能會(huì)出現(xiàn)的異常語(yǔ)句return用于從函數(shù)返回計(jì)算結(jié)果whilewhile循環(huán)語(yǔ)句yield用于從函數(shù)依次返回值with對(duì)象上下文管理True比較操作返回的結(jié)果,True與1相同async聲明一個(gè)函數(shù)為異步函數(shù)None定義一個(gè)空值(根本沒(méi)有值)

1.5.2基本語(yǔ)法(3)縮進(jìn)Python語(yǔ)言遵循嚴(yán)格的縮進(jìn)規(guī)則,用以指示代碼之間的層級(jí)和包含關(guān)系。采用“縮進(jìn)”表示代碼(不需要使用大括號(hào){}),縮進(jìn)的空格數(shù)是可變的,但是同一個(gè)代碼塊的語(yǔ)句必須包含相同的縮進(jìn)空格數(shù)。常用的縮進(jìn):TAB鍵或者四個(gè)空格1.5.2基本語(yǔ)法(4)注釋對(duì)關(guān)鍵代碼和重要業(yè)務(wù)邏輯代碼應(yīng)進(jìn)行必要的、恰當(dāng)?shù)淖⑨?。注釋是用于提高代碼可讀性的輔助性文字,不被執(zhí)行。Python語(yǔ)言中單行注釋采用#開(kāi)頭,多行注釋使用三個(gè)單引號(hào)(''')或三個(gè)雙引號(hào)(""")。1.5.2基本語(yǔ)法(5)輸入和輸出input()和print()是Python語(yǔ)言的基本輸入/輸出函數(shù),前者用來(lái)接收用戶的鍵盤(pán)輸入,后者用來(lái)把數(shù)據(jù)以指定的格式輸出到標(biāo)準(zhǔn)控制臺(tái)或指定的文件對(duì)象。不論用戶輸入什么內(nèi)容,input()一律返回字符串,必要的時(shí)候可以使用內(nèi)置函數(shù)int()、float()或eval()對(duì)用戶輸入的內(nèi)容進(jìn)行類型轉(zhuǎn)換。1.5.3數(shù)據(jù)類型對(duì)象類型類型名稱示例說(shuō)明數(shù)字intfloatcomplex123,0x2aa,0b1015.45,2.3e55+5j,6j

字符串str'python'''IloveChina''使用單引號(hào)、雙引號(hào)、三引號(hào)作為定界符。列表list[1,2,3]所有元素放在一對(duì)方括號(hào)中,元素之間用逗號(hào)分隔,元素可以是任意類型。元組tuple(1,2,3)所有元素放在一對(duì)圓括號(hào)中,元素之間用逗號(hào)分隔。字典dict{'Name':"xmj",'Age':17}所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,元素形式為“鍵:值”,鍵不可以重復(fù)。集合set{'a','b','c'}所有元素放在一對(duì)大括號(hào)中,元素之間使用逗號(hào)分隔,元素不允許重復(fù)且必須為不可變類型。布爾型boolTrue,False邏輯值文件

f=open('machine.txt','rb')使用指定的模式打開(kāi)文件,返回文件對(duì)象。編程單元

函數(shù)(使用def定義)類(使用class定義)模塊(類型為module)

1-5Python內(nèi)置對(duì)象1.5.3數(shù)據(jù)類型(1)數(shù)字在Python語(yǔ)言中,內(nèi)置的數(shù)字類型有整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)。其中,整數(shù)類型除了常見(jiàn)的十進(jìn)制整數(shù),還有二進(jìn)制(0b開(kāi)頭)、八進(jìn)制(0o開(kāi)頭)和十六進(jìn)制(0x開(kāi)頭)。對(duì)于很大或很小的浮點(diǎn)數(shù),一般采用科學(xué)記數(shù)法表示(如1.23x109為1.23e9、0.000012為1.2e-5)。數(shù)值類型之間關(guān)系:數(shù)據(jù)類型間可進(jìn)行混合運(yùn)算,結(jié)果生成為“最寬”類型。整數(shù)、浮點(diǎn)數(shù)與復(fù)數(shù)在混合運(yùn)算時(shí)逐漸“擴(kuò)展”或“變寬”,如:123+4.0=127.0(整數(shù)+浮點(diǎn)數(shù)=浮點(diǎn)數(shù))。1.5.3數(shù)據(jù)類型(2)字符串在Python語(yǔ)言中,沒(méi)有字符常量與變量的概念,只有字符串類型的常量與變量(即使單個(gè)字符也視為字符串處理)。Python語(yǔ)言使用單引號(hào)、雙引號(hào)、三單引號(hào)、三雙引號(hào)作為定界符來(lái)表示字符串,并且不同的定界符之間可以相互嵌套。轉(zhuǎn)義字符作用\t制表符(Tab),用于產(chǎn)生約4個(gè)空格的空白\n換行符,用于使后續(xù)輸出另起一行\(zhòng)'轉(zhuǎn)義成單引號(hào)\''轉(zhuǎn)義成雙引號(hào)\\轉(zhuǎn)義成\\r回車表

1-6常用的轉(zhuǎn)義字符及其作用當(dāng)然,如果不想使用反斜杠(\)轉(zhuǎn)義特殊字符,可以在字符串前面添加一個(gè)“r”,表示原始字符串。

1.5.3數(shù)據(jù)類型

表1-7字符串基本運(yùn)算操作符描述實(shí)例結(jié)果+字符串連接a+b'HelloPython'*重復(fù)輸出字符串a(chǎn)*2'HelloHello'[]通過(guò)索引獲取字符串中字符a[1]'e'[:]截取字符串中的一部分a[1:4]'ell'in如果字符串中包含給定的字符返回True"H"inaTruenotin如果字符串中不包含給定的字符返回True"M"notinaTrue1.5.3數(shù)據(jù)類型(3)列表列表(list)是包含若干元素的有序序列。列表的所有元素放在一對(duì)方括號(hào)中,相鄰元素之間使用逗號(hào)分隔。在Python語(yǔ)言中,同一個(gè)列表中元素的數(shù)據(jù)類型可以各不相同,能夠同時(shí)包含整數(shù)、實(shí)數(shù)、字符串等基本類型的元素,也可以包含列表、元組、字典、集合等其他任意對(duì)象。如果只有一對(duì)方括號(hào)而沒(méi)有任何元素則表示空列表。1.5.3數(shù)據(jù)類型列表基本操作①使用下標(biāo)索引的方式訪問(wèn)列表中的值,列表中的元素從0開(kāi)始編號(hào)②刪除列表元素。del語(yǔ)句通過(guò)列表中的位置刪除列表的元素;remove()方法通過(guò)值刪除列表的元素;pop()方法刪除列表指定位置的元素,無(wú)參數(shù)刪除最后一元素。③添加列表元素。append()方法用于向列表尾部追加一個(gè)元素;insert()用于向列表任意指定位置插入一個(gè)元素;extend()方法用于將另一個(gè)可迭代對(duì)象中的所有元素追加至當(dāng)前列表的尾部。④列表的嵌套。列表中可以容納類型為列表的元素,稱為列表的嵌套。⑤列表運(yùn)算。列表同樣支持“+”和“*”操作符,“+”用于組合列表,“*”用于重復(fù)列表。1.5.3數(shù)據(jù)類型(4)元組元組(tuple)是只讀的列表。所謂只讀,是指一個(gè)元組被創(chuàng)建后,其值或者元素可以獲取,但不能修改。類似于列表,元組用一對(duì)括號(hào)標(biāo)識(shí),內(nèi)部元素用逗號(hào)隔開(kāi),下標(biāo)索引同樣從0開(kāi)始。1.5.3數(shù)據(jù)類型元組基本操作①基本上關(guān)于列表的嵌套、in、notin等運(yùn)算都適用于元組,切片也適用。那些會(huì)導(dǎo)致列表發(fā)生改變的函數(shù)則不適用于元組,因?yàn)樵M是只讀的。②元組與列表相互轉(zhuǎn)換:因?yàn)樵M中元素不能改變,所以可以將元組轉(zhuǎn)換為列表從而改變數(shù)據(jù)。實(shí)際上列表、元組和字符串之間可以相互轉(zhuǎn)換。1.5.3數(shù)據(jù)類型(5)字典字典(dict)是包含若干“鍵:值”元素的無(wú)序可變序列,字典中的每個(gè)元素包含“鍵”和“值”兩部分,表示一種映射關(guān)系。定義字典時(shí),每個(gè)元素的“鍵”和“值”之間用冒號(hào)分割,不同元組之間用逗號(hào)分隔,所有的元素放在一對(duì)大括號(hào)“{}”中。字典中元素的“鍵”可以是Python語(yǔ)言中任意不可變數(shù)據(jù),例如,整數(shù)、實(shí)數(shù)、復(fù)數(shù)、字符串、元組等。“鍵”必須是唯一的,而“值”是可以重復(fù)的。1.5.3數(shù)據(jù)類型字典的基本操作①字典元素的添加、修改與刪除。②字典可以使用values()方法以列表返回字典中的所有值;items()方法把字典中每對(duì)key和value組成一個(gè)元組放在列表中返回;in運(yùn)算用于判斷某鍵是否在字典里。1.5.3數(shù)據(jù)類型(6)集合集合(set)屬于Python語(yǔ)言無(wú)序可變序列,使用大括號(hào){}或者set()函數(shù)創(chuàng)建,元素之間使用逗號(hào)分隔,同一個(gè)集合內(nèi)的每個(gè)元素的值都是唯一的,不允許重復(fù)。另外,集合中只能包含數(shù)字、字符串、元組等不可變類型的數(shù)據(jù),不能包含列表、字典、集合等可變類型的數(shù)據(jù)。1.5.3數(shù)據(jù)類型集合基本操作①集合對(duì)象的創(chuàng)建與刪除。②集合元素增加與刪除。add()方法可以增加新元素;update()方法用于合并另外一個(gè)集合中的元素到當(dāng)前集合中;remove()或discard()方法刪除集合元素;pop()刪除集合中任意一個(gè)元素。③集合運(yùn)算。Python語(yǔ)言中集合支持使用"-"、"|"、"&"運(yùn)算符進(jìn)行集合的差集、并集、交集運(yùn)算。由于集合本身是無(wú)序的,所以不能為集合創(chuàng)建索引或進(jìn)行切片操作,只能使用in、notin或者循環(huán)遍歷來(lái)訪問(wèn)或判斷集合元素。1.5.4運(yùn)算符與表達(dá)式Python語(yǔ)言支持以下類型的運(yùn)算符:算術(shù)運(yùn)算符、比較(關(guān)系)運(yùn)算符、賦值運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、成員運(yùn)算符、身份運(yùn)算符。1.5.4運(yùn)算符與表達(dá)式運(yùn)算符描述實(shí)例+加:兩個(gè)對(duì)象相加a+b=>12-減:得到負(fù)數(shù)或兩數(shù)差值a-b=>8*乘:兩個(gè)數(shù)相乘或是字符串重復(fù)表示a*b=>20/除:兩數(shù)相除a/b=>5.0%取模:兩數(shù)相除的余數(shù)a%b=>0**冪:次冪運(yùn)算a**b=>100//取整除:返回商的整數(shù)部分(向下取整)9//2輸出結(jié)果4,9.0//2.0輸出結(jié)果4.0(1)算術(shù)運(yùn)算符Python語(yǔ)言算術(shù)運(yùn)算符除了可以表示常規(guī)的算術(shù)運(yùn)算外,還可以用于列表、元組、字符串的連接和重復(fù)等。常用的算術(shù)運(yùn)算符如表1-8所示(假設(shè)a=10,b=2)。表

1-8算術(shù)運(yùn)算符1.5.4運(yùn)算符與表達(dá)式運(yùn)算符描述實(shí)例==等于:比較對(duì)象是否相等(a==b)=>False!=或<>不等于:比較兩個(gè)對(duì)象是否不相等(a!=b)=>True>

大于:返回a是否大于b(a>b)=>True<

小于:返回a是否小于b(a<b)=>False>=大于等于:返回a是否大于等于b(a>=b)=>True<=小于等于:返回a是否小于等于b(a<=b)=>False(2)比較運(yùn)算符Python語(yǔ)言比較運(yùn)算符要求操作數(shù)之間必須可比較大小。常用的比較運(yùn)算符如表1-9所示(假設(shè)a=10,b=2)。表

1-9比較運(yùn)算符1.5.4運(yùn)算符與表達(dá)式(3)賦值運(yùn)算符表1-10賦值運(yùn)算符運(yùn)算符描述實(shí)例=簡(jiǎn)單的賦值運(yùn)算符c=a+b將a+b的運(yùn)算結(jié)果賦值為c+=加法賦值運(yùn)算符c+=a=>c=c+a-=減法賦值運(yùn)算符c-=a=>c=c-a*=乘法賦值運(yùn)算符c*=a=>c=c*a/=除法賦值運(yùn)算符c/=a=>c=c/a%=取模賦值運(yùn)算符c%=a=>c=c%a**=冪賦值運(yùn)算符c**=a=>c=c**a//=取整除賦值運(yùn)算符c//=a=>c=c//a注意:賦值運(yùn)算符左邊必須是變量,右邊可以是常量、變量、函數(shù)調(diào)用或常量、變量、函數(shù)調(diào)用組成的表達(dá)式(如x=1,y=x+1,y=func())1.5.4運(yùn)算符與表達(dá)式(4)邏輯運(yùn)算符Python語(yǔ)言的邏輯運(yùn)算符and、or、not常用來(lái)連接條件表達(dá)式。常用的邏輯運(yùn)算符如表1-11所示(假設(shè)a=10,b=2)。表1-11邏輯運(yùn)算符運(yùn)算符邏輯表達(dá)式描述實(shí)例andxandy"與":如果x為False,xandy返回False,否則返回y的計(jì)算值。(aandb)=>2。orxory"或":如果x是非0,它返回x的值,否則返回y的計(jì)算值。(aorb)=>10。notnotx"非":如果x為T(mén)rue,返回False;如果x為False,返回True。not(aandb)=>False1.5.4運(yùn)算符與表達(dá)式(5)位運(yùn)算符Python語(yǔ)言的位運(yùn)算符是把數(shù)字看作二進(jìn)制來(lái)進(jìn)行計(jì)算的。Python語(yǔ)言位運(yùn)算符如表1-12所示(假設(shè)a=1,b=2)。表1-12位運(yùn)算符運(yùn)算符描述實(shí)例&按位與運(yùn)算符:參與運(yùn)算的兩個(gè)值,如果兩個(gè)相應(yīng)位都為1,則該位的結(jié)果為1,否則為0(a&b)=>0|按位或運(yùn)算符:只要對(duì)應(yīng)的二個(gè)二進(jìn)位有一個(gè)為1時(shí),結(jié)果位就為1。(a|b)=>3^按位異或運(yùn)算符:當(dāng)兩對(duì)應(yīng)的二進(jìn)位相異時(shí),結(jié)果為1。(a^b)=>3~按位取反運(yùn)算符:對(duì)數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把1變?yōu)?,把0變?yōu)?。~x類似于-x-1。(~a)=>-2<<

左移動(dòng)運(yùn)算符:運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由

<<

右邊的數(shù)字指定了移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。a<<2=>4>>

右移動(dòng)運(yùn)算符:把“>>”左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,“>>”右邊的數(shù)字指定了移動(dòng)的位數(shù)。a>>2=>01.5.4運(yùn)算符與表達(dá)式(6)成員運(yùn)算符Python語(yǔ)言還支持成員運(yùn)算符用于成員測(cè)試,即測(cè)試一個(gè)對(duì)象是否包含另一個(gè)對(duì)象。Python語(yǔ)言成員運(yùn)算符如表1-13所示(假設(shè)a=’abc’,b=’abcdef’)表1-13成員運(yùn)算符運(yùn)算符描述實(shí)例in如果在指定的序列中找到值返回True,否則返回False。ainb=>Truenotin如果在指定的序列中沒(méi)有找到值返回True,否則返回False。anotinb=>False1.5.4運(yùn)算符與表達(dá)式(7)標(biāo)識(shí)運(yùn)算符Python語(yǔ)言的標(biāo)識(shí)運(yùn)算符用于比較兩個(gè)對(duì)象的存儲(chǔ)單元。Python語(yǔ)言標(biāo)識(shí)運(yùn)算符如表1-14所示(假設(shè)a=’abc’,b=’abcdef’)表1-14標(biāo)識(shí)運(yùn)算符運(yùn)算符描述實(shí)例isis是判斷兩個(gè)標(biāo)識(shí)符是不是引用自一個(gè)對(duì)象aisb=>Falseisnotisnot是判斷兩個(gè)標(biāo)識(shí)符是不是引用自不同對(duì)象aisnotb=>True1.5.4運(yùn)算符與表達(dá)式(8)運(yùn)算符優(yōu)先級(jí)表1-15運(yùn)算符優(yōu)先級(jí)運(yùn)算符描述**指數(shù)(最高優(yōu)先級(jí))~+-按位取反、一元加號(hào)和減號(hào)*/%//乘,除,取模和取整除+-加法減法>><<右移,左移運(yùn)算符&位'AND'^|位運(yùn)算符<=<>>=比較運(yùn)算符<>==!=等于運(yùn)算符=%=/=//=-=+=*=**=賦值運(yùn)算符isisnot身份運(yùn)算符innotin成員運(yùn)算符notandor邏輯運(yùn)算符1.5.5程序控制結(jié)構(gòu)在表達(dá)特定的業(yè)務(wù)邏輯時(shí),不可避免地要使用選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu),并且必要時(shí)還會(huì)對(duì)這兩種結(jié)構(gòu)進(jìn)行嵌套。Python語(yǔ)言中用于實(shí)現(xiàn)流程控制的特定語(yǔ)句分別為選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和跳轉(zhuǎn)語(yǔ)句。1.5.5程序控制結(jié)構(gòu)(1)選擇結(jié)構(gòu)Python語(yǔ)言中的選擇結(jié)構(gòu)主要包括單分支選擇結(jié)構(gòu)、雙分支選擇結(jié)構(gòu)和多分支選擇結(jié)構(gòu)。①單分支選擇結(jié)構(gòu)單分支選擇結(jié)構(gòu)語(yǔ)法如下。表達(dá)式后的冒號(hào)“:”是不可缺少的,表示一個(gè)語(yǔ)句塊的開(kāi)始,并且語(yǔ)句塊必須做相應(yīng)的縮進(jìn)。if表達(dá)式:語(yǔ)句塊1.5.5程序控制結(jié)構(gòu)②雙分支選擇結(jié)構(gòu)雙分支選擇結(jié)構(gòu)的語(yǔ)法如下。當(dāng)表達(dá)式值為T(mén)rue時(shí)執(zhí)行語(yǔ)句塊1,否則執(zhí)行語(yǔ)句塊2。語(yǔ)句塊1或語(yǔ)句塊2總有一個(gè)會(huì)執(zhí)行。同樣以縮進(jìn)來(lái)表示一個(gè)語(yǔ)句塊。if表達(dá)式:

語(yǔ)句塊1else:

語(yǔ)句塊21.5.5程序控制結(jié)構(gòu)③多分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu)的語(yǔ)法如下。由于Python語(yǔ)言不支持switch語(yǔ)句,所以多個(gè)條件判斷,只能用elif實(shí)現(xiàn)。其中,關(guān)鍵字elif是elseif的縮寫(xiě)。if表達(dá)式1:

語(yǔ)句塊1elif表達(dá)式2:

語(yǔ)句塊2elif表達(dá)式3:

語(yǔ)句塊3......else:

語(yǔ)句塊n1.5.5程序控制結(jié)構(gòu)(2)pass語(yǔ)句Python語(yǔ)言中的pass是空語(yǔ)句,pass不做任何事情,表示一個(gè)占位符,一般用作占位語(yǔ)句,能夠保證程序代碼結(jié)構(gòu)正確。pass可以用在選擇結(jié)構(gòu)中或者類和函數(shù)的定義中。1.5.5程序控制結(jié)構(gòu)(3)循環(huán)結(jié)構(gòu)Python語(yǔ)言主要有for循環(huán)和while循環(huán)兩種形式的循環(huán)結(jié)構(gòu),多個(gè)循環(huán)可以嵌套使用,也可以和選擇結(jié)構(gòu)嵌套使用來(lái)實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。在Python語(yǔ)言中,循環(huán)結(jié)構(gòu)可以帶else子句,其執(zhí)行過(guò)程為:如果循環(huán)因?yàn)闂l件表達(dá)式不成立或序列遍歷自然結(jié)束時(shí),則執(zhí)行else結(jié)構(gòu)中的語(yǔ)句。如果循環(huán)是因?yàn)閳?zhí)行了break語(yǔ)句而導(dǎo)致循環(huán)提前結(jié)束,則不會(huì)執(zhí)行else中的語(yǔ)句。1.5.5程序控制結(jié)構(gòu)①while循環(huán)while條件表達(dá)式:

循環(huán)語(yǔ)句[else:else子句代碼塊]1.5.5程序控制結(jié)構(gòu)②for循環(huán)for循環(huán)變量in可迭代對(duì)象:

循環(huán)體[else: else子句代碼塊]注意:for語(yǔ)句的執(zhí)行過(guò)程是:每次循環(huán),判斷循環(huán)變量是否還在序列中。如果在,循環(huán)繼續(xù);如果不在,則結(jié)束循環(huán)。1.5.5程序控制結(jié)構(gòu)(4)break和continue語(yǔ)句break語(yǔ)句和continue語(yǔ)句在while循環(huán)和for循環(huán)中都可以使用,一般常與選擇結(jié)構(gòu)結(jié)合使用。一旦break語(yǔ)句被執(zhí)行,跳出并結(jié)束當(dāng)前整個(gè)循環(huán);continue語(yǔ)句的作用是提前結(jié)束本次循環(huán),并忽略continue之后的語(yǔ)句,提前進(jìn)入下一次循環(huán)。1.5.5程序控制結(jié)構(gòu)(5)循環(huán)嵌套循環(huán)嵌套時(shí),外層循環(huán)和內(nèi)層循環(huán)是包含關(guān)系,即內(nèi)層循環(huán)必須被完全包含在外層循環(huán)中。當(dāng)程序中出現(xiàn)循環(huán)嵌套時(shí),程序每執(zhí)行一次外層循環(huán),則其內(nèi)層循環(huán)必須循環(huán)所有的次數(shù)(即內(nèi)層循環(huán)結(jié)束)后,才能進(jìn)入到外層循環(huán)的下一次循環(huán)。1.5.6函數(shù)函數(shù)將一組命令語(yǔ)句封裝在一起,以便重復(fù)調(diào)用。函數(shù)可促進(jìn)“代碼重用”,并減少代碼冗余。使用函數(shù)還有助于將一個(gè)Python語(yǔ)言程序所需完成的任務(wù),分解為若干定義清晰的子任務(wù),每個(gè)子任務(wù)由一個(gè)函數(shù)完成。1.5.6函數(shù)(1)基本語(yǔ)法在Python語(yǔ)言中,函數(shù)的定義語(yǔ)法如下:def函數(shù)名([參數(shù)列表]): “注釋”

函數(shù)體 return表達(dá)式其中,def是用來(lái)定義函數(shù)的關(guān)鍵字1.5.6函數(shù)(2)函數(shù)參數(shù)函數(shù)定義時(shí),圓括號(hào)內(nèi)是使用逗號(hào)分隔開(kāi)的形參列表,函數(shù)可以有多個(gè)參數(shù),也可以沒(méi)有參數(shù)。調(diào)用函數(shù)時(shí)向其傳遞實(shí)參,將實(shí)參的引用傳遞給形參。①位置參數(shù)②關(guān)鍵字參數(shù)③默認(rèn)值參數(shù)④不定長(zhǎng)參數(shù)1.5.6函數(shù)(3)匿名函數(shù)lambda表達(dá)式常用來(lái)聲明匿名函數(shù),匿名函數(shù)就是沒(méi)有名稱的函數(shù),不再使用def定義。lambda表達(dá)式只可以包含一個(gè)表達(dá)式,不允許包含復(fù)雜語(yǔ)句和結(jié)構(gòu),但在表達(dá)式中可以調(diào)用其他函數(shù),該表達(dá)式的計(jì)算結(jié)果相當(dāng)于函數(shù)的返回值。匿名函數(shù)使用lambda[arg1[,arg2,.....argn]]:表達(dá)式1.5.6函數(shù)(4)遞歸函數(shù)如果在一個(gè)函數(shù)中直接或間接地調(diào)用了該函數(shù)自身,稱為遞歸函數(shù)。函數(shù)的遞歸調(diào)用是函數(shù)調(diào)用的一種特殊情況,當(dāng)某個(gè)條件得到滿足的時(shí)候則不再調(diào)用。1.5.6函數(shù)(5)變量作用域變量作用域是指變量起作用的代碼范圍,不同作用域內(nèi)同名變量互不影響。在Python語(yǔ)言中,只有當(dāng)變量在Module(模塊)、Class(類)、def(函數(shù))中定義時(shí)才會(huì)有作用域的概念。Python語(yǔ)言變量作用域可以分為L(zhǎng)EGB四種。①L(Local)局部作用域:函數(shù)內(nèi)的區(qū)域,包括局部變量和參數(shù)。②E(Enclosing)嵌套作用域:外面嵌套函數(shù)區(qū)域。③G(Global)全局作用域:在模塊文件頂層聲明的變量具有全局作用域,全局作用域的作用范圍僅限于單個(gè)模塊文件內(nèi)。④B(Built-in)內(nèi)置作用域:系統(tǒng)內(nèi)固定模塊里定義的變量。Python語(yǔ)言中變量是采用L->E->G->B的順序查找。1.5.6函數(shù)(6)全局變量和局部變量定義在函數(shù)內(nèi)部的變量擁有局部作用域,定義在函數(shù)外的變量擁有全局作用域。局部變量只能在其被聲明的函數(shù)內(nèi)部訪問(wèn),而全局變量可以在整個(gè)程序范圍內(nèi)訪問(wèn)。1.5.6函數(shù)(7)global和nonlocal關(guān)鍵字global在函數(shù)中修改全局作用域變量的值;nonlocal在函數(shù)中修改嵌套作用域中變量的值。注意:使用global關(guān)鍵字修飾的變量之前可以不存在,而使用nonlocal關(guān)鍵字修飾的變量在嵌套作用域中必須已經(jīng)存在。1.5.7面向?qū)ο驪ython語(yǔ)言是面向?qū)ο蟮慕忉屝透呒?jí)動(dòng)態(tài)編程語(yǔ)言。面向?qū)ο螅∣bjectOriented)是一種對(duì)現(xiàn)實(shí)世界理解和抽象的方法,把相關(guān)的數(shù)據(jù)和方法組織為一個(gè)整體來(lái)看待。不同對(duì)象之間通過(guò)消息機(jī)制來(lái)通信。對(duì)于相同類型的對(duì)象抽象后,得出共同的特征而形成類(class)。創(chuàng)建類時(shí)用變量形式表示對(duì)象特征的成員稱為數(shù)據(jù)成員,用函數(shù)形式表示對(duì)象行為的成員稱為成員方法,數(shù)據(jù)成員和成員方法統(tǒng)稱為類的成員。1.5.7面向?qū)ο螅?)類定義與使用Python語(yǔ)言使用關(guān)鍵字class來(lái)定義類,后面是類的名字,然后是一個(gè)冒號(hào),最后換行并定義類的內(nèi)部實(shí)現(xiàn),其基本語(yǔ)言格式如下:class類名:

類的屬性

類的方法完成類定義之后,可以用類實(shí)例化對(duì)象,并通過(guò)“對(duì)象名.成員”的方式訪問(wèn)其中的數(shù)據(jù)成員或成員方法。1.5.7面向?qū)ο螅?)構(gòu)造函數(shù)很多類都傾向于將對(duì)象創(chuàng)建為有初始狀態(tài),因此可能會(huì)定義一個(gè)名為_(kāi)_init__()的特殊方法,稱為構(gòu)造函數(shù)(init前后各兩個(gè)橫短線)。創(chuàng)建類的實(shí)例過(guò)程中,系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造方法,從而實(shí)現(xiàn)對(duì)類進(jìn)行初始化的操作。1.5.7面向?qū)ο螅?)類屬性與方法從形式上看,在定義類的成員時(shí),如果成員名以兩個(gè)下劃線開(kāi)頭但是不以兩個(gè)下劃線結(jié)束,則表示是私有(private)成員。私有成員在類的外部不能直接訪問(wèn),可以使用self.__private_attrs或self.__private_methods的方式使用類內(nèi)部的私有成員。1.5.7面向?qū)ο螅?)繼承繼承是一種實(shí)現(xiàn)設(shè)計(jì)復(fù)用和代碼復(fù)用的機(jī)制,描述的是事物之間的從屬關(guān)系。類的繼承是指在一個(gè)現(xiàn)有類的基礎(chǔ)上構(gòu)建一個(gè)新的類。在繼承關(guān)系中,已有的類稱為父類或基類,新設(shè)計(jì)的類稱為子類或派生類。派生類可以繼承父類的公有成員,但是不能繼承其私有成員。如果需要在派生類中調(diào)用基類的方法,可以使用內(nèi)置函數(shù)super()或者通過(guò)“基類名.方法名()”的方式實(shí)現(xiàn)。繼承可以分為單繼承和多繼承。1.5.7面向?qū)ο螅?)類的特殊方法方法功能說(shuō)明方法功能說(shuō)明__init__()構(gòu)造方法,創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用__call__()函數(shù)調(diào)用__del__()析構(gòu)方法,釋放對(duì)象時(shí)自動(dòng)調(diào)用__cmp__()比較運(yùn)算__add__()加運(yùn)算(+)__pos__()一元運(yùn)算符+,正號(hào)__sub__()減運(yùn)算(-)__neg__()一元運(yùn)算符-,負(fù)號(hào)__mul__()乘運(yùn)算(*)__contains__()與成員測(cè)試運(yùn)算符in對(duì)應(yīng)__div__()除運(yùn)算(/)__mod__()求余運(yùn)算(%)__getitem__()按照索引獲取值__pow__()乘方運(yùn)算(**)__len__()獲得長(zhǎng)度__setitem__()按照索引賦值1.5.8文件文件是長(zhǎng)久保存信息并允許重復(fù)使用和反復(fù)修改的重要方式,同時(shí)也是信息交換的重要途徑。Python語(yǔ)言中操作的文件按數(shù)據(jù)的組織形式可以把文件分為文本文件和二進(jìn)制文件兩類。1.5.8文件(1)文件打開(kāi)關(guān)閉操作無(wú)論是文本文件還是二進(jìn)制文件,操作流程基本一樣,首先打開(kāi)文件并創(chuàng)建文件對(duì)象,然后通過(guò)該文件對(duì)象對(duì)文件內(nèi)容進(jìn)行讀取、寫(xiě)入、刪除和修改等操作,最后使用close()方法關(guān)閉并保存文件內(nèi)容。open()函數(shù)可以按指定模式打開(kāi)文件并返回一個(gè)文件對(duì)象,基本語(yǔ)法格式如下:open(filename,mode)filename為要訪問(wèn)的文件名稱的字符串值;mode為打開(kāi)文件的模式1.5.8文件(1)文件打開(kāi)關(guān)閉操作常用文件打開(kāi)模式模式說(shuō)明r以只讀的方式打開(kāi)文件,文件的指針將會(huì)放在文件的開(kāi)頭,為默認(rèn)模式w寫(xiě)模式,如果該文件已存在則將會(huì)覆蓋文件,如果不存在則創(chuàng)建新文件。rb以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀,文件指針會(huì)在文件的開(kāi)頭。r+打開(kāi)一個(gè)文件用于讀寫(xiě),文件指針將會(huì)在文件的開(kāi)頭。rb+以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě),文件指針會(huì)放在文件的開(kāi)頭。wb以二進(jìn)制打開(kāi)一個(gè)文件用于寫(xiě)入。w+打開(kāi)一個(gè)文件用于讀寫(xiě)。wb+以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě),如果文件存在則覆蓋,如果不存在則創(chuàng)建新文件。a追加模式,不覆蓋文件中原有內(nèi)容。ab以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加寫(xiě)入。a+讀寫(xiě),文件打開(kāi)時(shí)會(huì)是追加模式,該文件不存在則創(chuàng)建新文件。ab+以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。1.5.8文件(2)文件對(duì)象常用方法方法功能說(shuō)明read([size])從文本文件中讀取size個(gè)字符作為結(jié)果返回,或從二進(jìn)制文件中讀取size個(gè)字節(jié)并返回,如果省略size則表示讀取所有內(nèi)容。readline()從文本文件中讀取一行內(nèi)容作為結(jié)果返回。readlines()把文本文件中的每行文本作為一個(gè)字符串存入列表中,返回該列表。write(string)將string寫(xiě)入到文件中,然后返回寫(xiě)入的字符數(shù)。tell()返回文件對(duì)象當(dāng)前所處的位置。seek(offset[,whence])把文件指針移動(dòng)到指定位置,offset表示相對(duì)于whence的偏移量。whence為0表示從文件開(kāi)頭計(jì)算,1表示從當(dāng)前位置開(kāi)始計(jì)算,2表示從文件尾開(kāi)始計(jì)算,默認(rèn)為0。close()把緩沖區(qū)的內(nèi)容寫(xiě)入文件,同時(shí)關(guān)閉文件,并釋放文件對(duì)象。1.6常用庫(kù)機(jī)器學(xué)習(xí)算法的設(shè)計(jì)及相關(guān)數(shù)據(jù)的處理需用到科學(xué)計(jì)算庫(kù)(Numpy)、機(jī)器學(xué)習(xí)庫(kù)(Scikit-learn)、繪圖庫(kù)(Matplotlib)與圖像處理庫(kù)(PIL與Torchvision)。1.6.1科學(xué)計(jì)算庫(kù)(Numpy)NumPy(NumericalPython的縮寫(xiě))庫(kù)是一個(gè)開(kāi)源的Python科學(xué)計(jì)算庫(kù),主要用于數(shù)組計(jì)算,面向多維數(shù)組與矩陣運(yùn)算,涵蓋線性代數(shù)運(yùn)算、傅里葉變換和隨機(jī)數(shù)生成等功能。NumPy庫(kù)提供了大量易于使用且運(yùn)算高效的數(shù)據(jù)類型與操作方法,是構(gòu)建機(jī)器學(xué)習(xí)模型的基礎(chǔ)。Numpy庫(kù)的導(dǎo)入方式如下:importnumpyasnpNumPy中的數(shù)組對(duì)象十分重要,數(shù)組對(duì)象可以用于對(duì)批量數(shù)據(jù)進(jìn)行存儲(chǔ)和集中處理。數(shù)組(Array)是有序的元組序列,數(shù)據(jù)對(duì)象的基本操作主要有數(shù)組對(duì)象的創(chuàng)建和常用屬性、數(shù)據(jù)元素的訪問(wèn)與修改、數(shù)組對(duì)象的基本運(yùn)算和常用函數(shù)。1.6.1科學(xué)計(jì)算庫(kù)(Numpy)(1)數(shù)組創(chuàng)建創(chuàng)建NumPy數(shù)組的方式主要有3種。array()函數(shù)創(chuàng)建數(shù)組;zeros()、ones()、empty()函數(shù)創(chuàng)建數(shù)組;arange()函數(shù)創(chuàng)建等間隔的數(shù)字?jǐn)?shù)組。1.6.1科學(xué)計(jì)算庫(kù)(Numpy)(2)數(shù)組基本運(yùn)算NumPy算術(shù)運(yùn)算主要針對(duì)數(shù)組進(jìn)行最基本的運(yùn)算(如加減乘除、取倒數(shù)、求冪、求余數(shù)等),相關(guān)函數(shù)包括add()、subtract()、multiply()、divide()、power()、mod()、sqrt()、sum()、max()、min()、around()、floor()與ceil()等1.6.1科學(xué)計(jì)算庫(kù)(Numpy)(3)數(shù)組操作NumPy提供了函數(shù)或方法對(duì)數(shù)組進(jìn)行基本操作,掌握這些操作,可以使數(shù)組變得更加靈活多變,也可以為后續(xù)的編程提供更簡(jiǎn)便的算法。本節(jié)主要介紹以下函數(shù):reshape()、concatenate()、stack()、sort()、append()、where()等1.6.1科學(xué)計(jì)算庫(kù)(Numpy)①reshape()函數(shù)的功能是改變數(shù)組的形狀,將x維數(shù)組轉(zhuǎn)換成y維數(shù)組其函數(shù)格式為reshape(n);其中,參數(shù)n是要改變的數(shù)組。該函數(shù)只能在等數(shù)量的情況下才可以使用1.6.1科學(xué)計(jì)算庫(kù)(Numpy)②concatenate()函數(shù)功能用于沿指定軸連接相同形狀的多個(gè)數(shù)組函數(shù)格式為concatenate(arr,axis)其中,arr表示待連接的數(shù)組(要求數(shù)組維數(shù)一致),axis表示在指定維度上進(jìn)行連接(默認(rèn)值是0,0與1分別表示數(shù)據(jù)在0維度或1維度進(jìn)行拼接)1.6.1科學(xué)計(jì)算庫(kù)(Numpy)③stack()、hstack()與vstack()stack()函數(shù)沿指定軸對(duì)數(shù)組合并,其函數(shù)格式為:stack(x,axis=0);其中,x表示數(shù)組(數(shù)組的形狀必須相同);axis表示在指定維度上進(jìn)行堆疊(默認(rèn)值是0,0與1分別表示數(shù)據(jù)在0維度或1維度進(jìn)行堆疊)hstack()表示沿水平方向堆疊數(shù)組vstack()表示沿垂直方向堆疊數(shù)組1.6.1科學(xué)計(jì)算庫(kù)(Numpy)④append()、unique()、sort()、argmax()與argmin()。append()用于在數(shù)組的末尾添加元素,其函數(shù)格式為:numpy.append(arr,values,axis=None)其中,arr為已知數(shù)組,values為待追加數(shù)組,axis表示在指定維度進(jìn)行添加(如果沒(méi)有指定axis,則數(shù)組會(huì)展平成一維數(shù)組;0與1分別表示數(shù)據(jù)在0維度或1維度進(jìn)行數(shù)組追加)。sort()函數(shù)返回輸入數(shù)組的排序副本,其函數(shù)格式為:sort(arr,axis,kind,order);其中,arr是要排序的數(shù)組,axis是沿著排序的軸,kind是排序方法,order是排序的字段argmax()與argmin()的功能是求最大或最小數(shù)組元素的索引。unique()去除數(shù)組重復(fù)元素,并按升序排序數(shù)組。1.6.1科學(xué)計(jì)算庫(kù)(Numpy)⑤where()函數(shù)用于篩選出滿足條件的元素的下標(biāo)。其函數(shù)格式為where(condition[,x,y])其中,根據(jù)條件返回x或者y中的元素,滿足條件輸出x中的值,不滿足條件輸出y中的值;如果只有條件,則輸出滿足條件對(duì)應(yīng)的索引。1.6.2機(jī)器學(xué)習(xí)庫(kù)(Scikit-learn)Scikit-learn庫(kù)()是基于Python語(yǔ)言的機(jī)器學(xué)習(xí)庫(kù),其基本功能包括以下六個(gè)部分:(1)分類預(yù)測(cè)樣本所屬類別(如狗與兔類別的識(shí)別),屬于監(jiān)督學(xué)習(xí)范疇,具體包括支持向量機(jī)(分類)、K近鄰、Logisitc回歸、隨機(jī)森林、決策樹(shù)以及神經(jīng)網(wǎng)絡(luò)等算法。(2)回歸預(yù)測(cè)樣本相關(guān)連續(xù)值(如成績(jī)、溫度等預(yù)測(cè)),具體包括線性回歸、支持向量回歸(回歸)、脊回歸等算法。1.6.2機(jī)器學(xué)習(xí)庫(kù)(Scikit-learn)(3)聚類在無(wú)類別標(biāo)記的情況下對(duì)樣本進(jìn)行分類,屬于無(wú)監(jiān)督學(xué)習(xí)的范疇,具體包括K均值聚類、譜聚類、均值偏移、分層聚類等算法。(4)降維利用主成分分析、線性判別分析或特征選擇等技術(shù)減少特征的數(shù)量,進(jìn)而降低相關(guān)模型的復(fù)雜度以提高其訓(xùn)練效率。(5)模型選擇用于模型的比較、驗(yàn)證與選擇,具體包括格點(diǎn)搜索、交叉驗(yàn)證與各種針對(duì)預(yù)測(cè)誤差評(píng)估的度量函數(shù)。(6)預(yù)處理將初始數(shù)據(jù)轉(zhuǎn)化為模型構(gòu)建所需格式或?qū)?shù)據(jù)進(jìn)行歸一化、標(biāo)準(zhǔn)化等處理以提高模型訓(xùn)練的可靠性。1.6.2機(jī)器學(xué)習(xí)庫(kù)(Scikit-learn)1.6.2機(jī)器學(xué)習(xí)庫(kù)(Scikit-learn)Scikit-learn庫(kù)還集成了用于回歸或分類等問(wèn)題求解的實(shí)驗(yàn)數(shù)據(jù)。對(duì)于Scikit-learn庫(kù)集成的數(shù)據(jù)集,可以使用datasets.load_*()方法進(jìn)行加載,如:fromsklearn.datasetsimportload_iris1.6.2機(jī)器學(xué)習(xí)庫(kù)(Scikit-learn)名稱調(diào)用方式適用模型數(shù)據(jù)結(jié)構(gòu)鳶尾花數(shù)據(jù)集load_iris()分類150*4(3類)數(shù)字?jǐn)?shù)據(jù)集load_digits()分類1797*64(10類)乳腺癌數(shù)據(jù)集load_breas_cancer()分類569*30(2類)紅酒數(shù)據(jù)集load_wine()分類178*13(3類)波士頓房?jī)r(jià)數(shù)據(jù)集load_boston()回歸506*13(5-50)糖尿病數(shù)據(jù)集load_diabetes()回歸442*10(25-346)表1-20常用數(shù)據(jù)集1.6.2機(jī)器學(xué)習(xí)庫(kù)(Scikit-learn)在數(shù)據(jù)集加載之后,可通過(guò)表1-21所示的屬性對(duì)相關(guān)信息進(jìn)行讀取。表1-21常用屬性名稱說(shuō)明data數(shù)據(jù)數(shù)組,是具有n_samples*n_features結(jié)構(gòu)形式的二維numpy.ndarray數(shù)組。datatarget標(biāo)簽數(shù)組,是具有n_samples結(jié)構(gòu)形式的一維numpy.ndarray數(shù)組。DESCR數(shù)據(jù)描述。feature_names特征名。target_names標(biāo)簽名。target以浮點(diǎn)數(shù)或類別標(biāo)記構(gòu)成目標(biāo)值。1.6.3繪圖庫(kù)(Matplotlib)Matplotlib依賴NumPy和tkinter,可以繪制多種形式的圖形,包括折線圖、散點(diǎn)圖、餅狀圖、柱狀圖、雷達(dá)圖、功率譜、誤差圖等。Matplotlib不僅在數(shù)據(jù)可視化領(lǐng)域有重要的應(yīng)用,還常用于科學(xué)計(jì)算可視化。Matplotlib包括pylab、pyplot等繪圖模塊以及大量可用于字體、顏色等圖像元素的管理與控制的模塊,可以使用非常簡(jiǎn)潔的代碼繪制出各種優(yōu)美的圖案。Matplotlib繪圖的基本步驟為:導(dǎo)入第三方庫(kù)、準(zhǔn)備數(shù)據(jù)、開(kāi)始繪圖、完善圖表以及展示結(jié)果。1.6.3繪圖庫(kù)(Matplotlib)讀者可以查閱Matplotlib官方在線文檔/index.html獲取相關(guān)內(nèi)容。Matplotlib庫(kù)的導(dǎo)入方式如下:importmatplotlib.pyplotasplt1.6.3繪圖庫(kù)(Matplotlib)(1)創(chuàng)建空白窗體函數(shù)基本形式如下:figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None)其中,num可設(shè)置為整數(shù)(窗體序號(hào))或字符串(窗體名稱)、figsize表示窗體尺寸(元組類型)、dpi表示窗口的分辨率、facecolor與edgecolor分別表示窗體背景與邊框顏色。1.6.3繪圖庫(kù)(Matplotlib)代碼顏色代碼顏色b藍(lán)色g綠色r紅色y黃色c青色k黑色m洋紅色w白色Matplotlib常用顏色1.6.3繪圖庫(kù)(Matplotlib)Matplotlib常用散點(diǎn)形狀標(biāo)記描述標(biāo)記描述標(biāo)記描述o圓圈.點(diǎn)+加號(hào)D菱形s正方形xXh六邊形1*星號(hào),像素H六邊形2d小菱形p五邊形_水平線v一角朝下的三角形>

一角朝右的三角形8八邊形<

一角朝左的三角形^一角朝上的三角形1.6.3繪圖庫(kù)(Matplotlib)線條風(fēng)格描述線條風(fēng)格描述'-'實(shí)線':'虛線'--'破折線'-.'點(diǎn)劃線Matplotlib常用線條類型(參數(shù)為linestyle或ls)1.6.3繪圖庫(kù)(Matplotlib)位置代碼位置代碼位置代碼'best'0(自適應(yīng))'lowerright'4'lowercenter'8'upperright'1'right'5'uppercenter'9'upperleft'2'centerleft'6'center'10'lowerleft'3'centerright'7

Matplotlib圖例顯示位置代碼1.6.3繪圖庫(kù)(Matplotlib)(2)繪制折線圖折線圖適合描述數(shù)據(jù)的變化趨勢(shì),主要用于顯示隨x軸上設(shè)定的有序類別而變化的連續(xù)數(shù)據(jù),在自變量相等的情況下數(shù)據(jù)的變化趨勢(shì)。繪制折線圖一般使用plot()函數(shù),在其傳入的參數(shù)中可以輕松調(diào)整繪制線條的風(fēng)格。函數(shù)基本形式如下:plot([x],y,[fmt])其中,x與y分別為所繪圖形的橫縱坐標(biāo),fmt為控制線條外觀的字符串。1.6.3繪圖庫(kù)(Matplotlib)(3)繪制散點(diǎn)圖散點(diǎn)圖多用于顯示或比較數(shù)據(jù)點(diǎn)的分布形態(tài),在數(shù)據(jù)科學(xué)、數(shù)據(jù)統(tǒng)計(jì)和數(shù)據(jù)工程等領(lǐng)域中經(jīng)常用到。散點(diǎn)圖使用scatter()函數(shù)繪制。函數(shù)基本形式如下:scatter(x,y,s=None,c=None,marker=None,alpha=None,linewidths=None,edgecolors=None)其中,x與y分別為散點(diǎn)的橫縱坐標(biāo)、s為散點(diǎn)的尺寸、c為散點(diǎn)顏色、alpha為散點(diǎn)的透明度(范圍為0-1)、linewidths為散點(diǎn)邊緣寬度、edgecolors與marker分別為散點(diǎn)的邊緣顏色與形狀。1.6.3繪圖庫(kù)(Matplotlib)(4)繪制餅圖餅圖適合描述數(shù)據(jù)的分布,尤其是描述各類數(shù)據(jù)占比的場(chǎng)合。如果餅圖中有兩個(gè)以上面積相近的扇形,應(yīng)在餅圖中同時(shí)顯示每個(gè)扇形區(qū)域所占的百分比。餅圖使用pie()函數(shù)繪制。函數(shù)基本形式如下:pie(x,explode=None,labels=None,colors=('b','g','r','c','m','y','k','w'),autopct=None,startangle=None,radius=None)其中,X表示每一塊的比例、labels表示每一塊外側(cè)顯示的說(shuō)明文字、explode表示每一塊離中心距離、startangle表示起始繪制角度、autopct表示控制餅圖內(nèi)百分比設(shè)置、radius表示餅圖半徑。1.6.3繪圖庫(kù)(Matplotlib)(5)繪制柱狀圖柱狀圖是統(tǒng)計(jì)中使用頻率很高的一種,常用來(lái)比較不同組數(shù)據(jù)之間的大小。柱狀圖使用bar()函數(shù)繪制,該函數(shù)提供了大量參數(shù)可以設(shè)置柱狀圖的屬性。函數(shù)基本形式如下:bar(left,height,width,bottom,color)其中,left為柱體左側(cè)的X坐標(biāo)、height為柱體的高度、width為柱體的寬度、bottom為柱體Y軸的起始位置、color為柱體的顏色。柱狀圖可以簡(jiǎn)單地分為水平柱狀圖、垂直柱狀圖以及堆積柱形圖。1.6.4圖像處理庫(kù)(PIL與Torchvision)圖像處理是利用計(jì)算機(jī)對(duì)圖像進(jìn)行增強(qiáng)、去噪、幾何變換等諸多操作的技術(shù)。(1)RGB顏色模型在此模型中,任意顏色由取值為0-255的紅(R)、綠(G)、藍(lán)(B)三種顏色混合而成,三種顏色比例不同,合成后的顏色也不同(如純紅色對(duì)應(yīng)的三種顏色值分別為255、0與0,灰色對(duì)應(yīng)的三種顏色值相等但不包括255與0,白色對(duì)應(yīng)三種顏色值均為255,黑色對(duì)應(yīng)的三種顏色值均為0)。1.6.4圖像處理庫(kù)(PIL與Torchvision)(2)圖像色彩屬性圖像具有亮度、對(duì)比度、色調(diào)與飽和度等基本屬性。①亮度:亮度是指彩色光作用于人眼時(shí),在視覺(jué)上引起的明暗程度;若是灰度圖像(每個(gè)像素取值范圍為0-255),灰度值越高則圖像越亮。②對(duì)比度:對(duì)比度是指圖像中不同顏色最亮灰度值與最暗灰度值之間的差異,差異越大對(duì)比度越高,否則越低。一般而言,對(duì)比度越高,圖像越清晰醒目,色彩也越鮮明艷麗,但對(duì)比度過(guò)大,圖像則將顯得很刺眼。1.6.4圖像處理庫(kù)(PIL與Torchvision)(2)圖像色彩屬性圖像具有亮度、對(duì)比度、色調(diào)與飽和度等基本屬性。③飽和度:飽和度是指圖像中不同顏色的深淺程度;飽和度越高,顏色越深或飽滿,飽和度越低,顏色則越淺或陳舊(飽和度為0時(shí),彩色圖像將轉(zhuǎn)化為灰度圖像)。④色調(diào):色調(diào)是指圖像中顏色的種類(如彩虹由紅、橙、黃、綠、青、藍(lán)、紫七色組成)。任何黑、白、灰以外的顏色均有色相屬性,對(duì)于灰度圖像,其色調(diào)級(jí)別為255或0時(shí)即成白色或黑色,介于其間的色調(diào)級(jí)別對(duì)應(yīng)不同程序的灰色。1.6.4圖像處理庫(kù)(PIL與Torchvision)(3)像素坐標(biāo)與顏色值圖像是由稱為像素(描述圖像的最小單位)的點(diǎn)組成的矩陣,如圖1-11所示,每個(gè)網(wǎng)格代表一個(gè)像素,每個(gè)像素的屬性由坐標(biāo)與顏色(或灰度)值描述。①圖像坐標(biāo):以圖像左上角為原點(diǎn)并在水平向右與垂直向下兩方向分別建立橫坐標(biāo)與縱坐標(biāo),則可在相應(yīng)的坐標(biāo)系中確定圖像中任意像素的坐標(biāo)。此外,若將圖像視為由像素構(gòu)成的矩陣,也可通過(guò)行列形式確定圖像中任意像素的位置。需要注意的是,對(duì)于同一像素的位置,相應(yīng)的橫、縱坐標(biāo)分別與列、行相對(duì)應(yīng)。1.6.4圖像處理庫(kù)(PIL與Torchvision)(3)像素坐標(biāo)與顏色值圖像是由稱為像素(描述圖像的最小單位)的點(diǎn)組成的矩陣,如圖1-11所示,每個(gè)網(wǎng)格代表一個(gè)像素,每個(gè)像素的屬性由坐標(biāo)與顏色(或灰度)值描述。②顏色或灰度值:由于RGB圖像中的每個(gè)像素由紅、綠與藍(lán)三種顏色融合而成,因而其在結(jié)構(gòu)上可視為由三個(gè)分別對(duì)應(yīng)于像素紅、綠與藍(lán)顏色值的矩陣(通常稱為通道,即RGB圖像由紅、綠與藍(lán)三個(gè)顏色通道構(gòu)成)疊加構(gòu)成。如圖1-11所示,對(duì)于橫坐標(biāo)與縱坐標(biāo)分別為12與9(或第9行與第12列)位置的像素,其紅、綠與藍(lán)顏色通道值分別255、0與0,因而呈現(xiàn)為紅色。此外,當(dāng)圖像只有一個(gè)顏色通道時(shí),若每個(gè)像素取值范圍為0-255,稱其為灰度圖,而當(dāng)每個(gè)像素取值為0或1時(shí),則稱其為黑白圖或二值圖。1.6.4圖像處理庫(kù)(PIL與Torchvision)(4)分辨率分辨率包括水平分辨率與垂直分辨率,兩者分別指圖像在水平與垂直兩個(gè)方向各有多少像素;例如,1920×1080分辨率表示水平與垂直兩個(gè)方向分別有1920與1080個(gè)像素,整幅圖像共有1920×1080=2073600個(gè)像素。分辨率越高,像素密度越高,圖像越逼真。1.6.4圖像處理庫(kù)(PIL與Torchvision)(5)圖像基本操作PIL(PythonImagingLibrary

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論