官术网_书友最值得收藏!

2.2 多維數(shù)組運(yùn)算

利用NumPy庫(kù)的ndarray多維數(shù)組進(jìn)行科學(xué)計(jì)算和數(shù)據(jù)處理時(shí),不需要使用單層和多層循環(huán)語(yǔ)句,即可對(duì)一個(gè)或多個(gè)數(shù)組中的元素進(jìn)行常用的計(jì)算和操作。便捷的運(yùn)算模式可以讓使用者只需關(guān)注計(jì)算和數(shù)據(jù)分析本身的邏輯,避免編程語(yǔ)言底層實(shí)現(xiàn)細(xì)節(jié)帶來(lái)的困擾。

2.2.1 基本算術(shù)運(yùn)算

1.二維數(shù)組與標(biāo)量運(yùn)算

【例2-3】 為所有學(xué)生的所有課程成績(jī)?cè)黾?分。

Python內(nèi)部實(shí)現(xiàn)數(shù)組與標(biāo)量相加時(shí),使用“廣播機(jī)制”首先將標(biāo)量5轉(zhuǎn)換為元素值為5的5×7二維數(shù)組,然后再將scores和新生成的數(shù)組按位相加,等價(jià)于以下代碼。

2.二維數(shù)組與一維數(shù)組運(yùn)算

【例2-4】 每個(gè)科目基礎(chǔ)分不同,為各科目成績(jī)?cè)黾酉鄳?yīng)的基礎(chǔ)分。

首先創(chuàng)建一維數(shù)組存放不同科目增加的分?jǐn)?shù),然后將其和scores相加。

上面的加法操作同樣也用到了廣播機(jī)制,NumPy首先將一維數(shù)組bonus變成每列值相同的5×7二維數(shù)組,然后再和scores相加。

3.選定元素運(yùn)算

如果需要對(duì)數(shù)組特定元素進(jìn)行運(yùn)算,可以先使用2.1節(jié)介紹的數(shù)據(jù)切片操作,得到特定元素,然后對(duì)其進(jìn)行計(jì)算。如給“肖良英”的“English”加5分。

Python支持的常見(jiàn)算術(shù)運(yùn)算,如“+”、“-”、“*”、“/”、“**”(平方)等都可以在多維數(shù)組上直接使用。

2.2.2 函數(shù)和矩陣運(yùn)算

NumPy庫(kù)支持ndarray元素級(jí)的通用函數(shù)和用于行、列或整個(gè)數(shù)組計(jì)算的聚集函數(shù)。另外,ndarray多維數(shù)組還支持常見(jiàn)的矩陣和矢量運(yùn)算。

1.通用函數(shù)(ufunc)

通用函數(shù)有一元函數(shù)和二元函數(shù),分別接收一個(gè)和兩個(gè)輸入數(shù)組,返回一個(gè)數(shù)組。常用的一元函數(shù)和二元函數(shù)如表2-2和表2-3所示。

表2-2 常用的一元函數(shù)

表2-3 常用的二元函數(shù)

【例2-5】 將學(xué)生的考試成績(jī)轉(zhuǎn)換成整數(shù)形式的十分制分?jǐn)?shù)。

【例2-6】 使用subtract()函數(shù)為每個(gè)學(xué)生的分?jǐn)?shù)減去3分。

NumPy使用廣播機(jī)制把標(biāo)量數(shù)據(jù)3變成了多維數(shù)組,然后和scores數(shù)組的各元素進(jìn)行減法操作。

2.聚集函數(shù)

ndarray數(shù)組支持在行、列或數(shù)組全體元素上的聚集函數(shù),可以求平均值、最大值、最小值、累加和等。常用的聚集函數(shù)如表2-4所示。

表2-4 常用的聚集函數(shù)

對(duì)于二維數(shù)組對(duì)象,可以指定聚集函數(shù)是在行上操作還是在列上操作。當(dāng)參數(shù)axis為0時(shí),函數(shù)操作的對(duì)象是同一列不同行的數(shù)組元素;當(dāng)參數(shù)axis為1時(shí),函數(shù)操作的對(duì)象是同一行不同列的數(shù)組元素。

【例2-7】 按照分析目標(biāo)使用聚集函數(shù)進(jìn)行統(tǒng)計(jì)。

1)統(tǒng)計(jì)不同科目的成績(jī)總分。

2)求“王微”所有課程成績(jī)的平均分。

首先利用布爾型數(shù)組選擇“王微”的所有成績(jī),然后使用求平均值函數(shù)mean()。

3)查詢(xún)英語(yǔ)考試成績(jī)最高的學(xué)生的姓名。

argmax()函數(shù)能返回特定元素的下標(biāo)。首先通過(guò)列篩選得到由所有學(xué)生英語(yǔ)成績(jī)組成的一維數(shù)組,接著通過(guò)argmax()函數(shù)返回一維數(shù)組中最高分的索引值,最后利用該索引值在names數(shù)組中查找到該學(xué)生的姓名。

2.2.3 隨機(jī)數(shù)組生成函數(shù)

NumPy庫(kù)的random模塊補(bǔ)充了Python的隨機(jī)數(shù)生成函數(shù),可以高效地生成服從多種概率分布的隨機(jī)樣本。常用函數(shù)如表2-5所示。

表2-5 常用函數(shù)

這些函數(shù)均可以使用元組給定生成數(shù)組的維度。

【例2-8】 生成由10個(gè)隨機(jī)整數(shù)組成的一維數(shù)組,整數(shù)的取值范圍為0~5。

randint(start, end, size),生成元素值從start到end-1范圍內(nèi)的整數(shù)數(shù)組,數(shù)組的大小由參數(shù)size對(duì)應(yīng)的元組給出。數(shù)組的元素值隨機(jī)生成,start到end-1范圍內(nèi)各整數(shù)出現(xiàn)的概率相等。

生成5×6的二維隨機(jī)整數(shù),隨機(jī)數(shù)的取值是0或1。

正態(tài)分布(Normal Distribution)又稱(chēng)高斯分布,是一個(gè)在數(shù)學(xué)、物理及工程等領(lǐng)域都非常重要的概率分布,對(duì)統(tǒng)計(jì)學(xué)尤為重要。正態(tài)曲線呈鐘形,兩頭低、中間高,如圖2-1所示,因此又稱(chēng)為鐘形曲線。

圖2-1 高斯分布概率密度圖

正態(tài)分布概率密度由期望和方差兩個(gè)統(tǒng)計(jì)量決定,normal函數(shù)可以模擬生成服從正態(tài)分布的一組數(shù)據(jù)。

【例2-9】 生成均值為0、方差為1服從正態(tài)分布的4×5二維數(shù)組。

思考與練習(xí)

1.將scores數(shù)組中所有學(xué)生的英語(yǔ)成績(jī)減去3分并顯示。

2.統(tǒng)計(jì)scores數(shù)組中每名學(xué)生所有科目的平均分并顯示。

3.使用隨機(jī)函數(shù)生成[-1,1]之間服從均勻分布的3×4二維數(shù)組,并計(jì)算所有元素的和。

主站蜘蛛池模板: 卫辉市| 津南区| 赤城县| 昌都县| 海盐县| 泗水县| 松桃| 桂东县| 马关县| 张家港市| 新宁县| 镇巴县| 尼玛县| 平乡县| 江油市| 富顺县| 奉节县| 新乡市| 翼城县| 白朗县| 松溪县| 大宁县| 云林县| 眉山市| 休宁县| 德州市| 阜康市| 鹰潭市| 西充县| 黑山县| 札达县| 泰来县| 竹溪县| 高陵县| 富平县| 黄龙县| 柯坪县| 九江县| 马山县| 犍为县| 成武县|