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

2.1 多維數(shù)組對(duì)象

標(biāo)準(zhǔn)Python不支持多維數(shù)組,為此NumPy庫(kù)提供了支持豐富數(shù)據(jù)表示方式的多維數(shù)組ndarray,方便一維、二維甚至多維的數(shù)組處理。ndarray數(shù)組對(duì)象所有元素類型必須相同,且大小固定,在創(chuàng)建時(shí)定義,使用過(guò)程中不可改變。一般采用如下方式導(dǎo)入NumPy庫(kù)。

由于NumPy庫(kù)的函數(shù)較多且與其他第三方庫(kù)重名,為了避免函數(shù)命名沖突,使用import…as關(guān)鍵字將Numpy重命名為np,在后續(xù)使用Numpy時(shí)用np代替,這樣,既簡(jiǎn)化了拼寫(xiě)也避免與其他庫(kù)的函數(shù)沖突。

案例2-1:學(xué)生課程考試成績(jī)數(shù)據(jù)

5位學(xué)生參加了學(xué)業(yè)水平考試,考試科目共7門(mén),考試成績(jī)?nèi)绫?-1所示。

表2-1 學(xué)業(yè)水平測(cè)試成績(jī)表

本章將圍繞此數(shù)據(jù)案例介紹如何使用ndarray存儲(chǔ)及處理學(xué)生成績(jī)數(shù)據(jù)。

2.1.1 一維數(shù)組對(duì)象

NumPy庫(kù)的array函數(shù)可以基于Python的列表創(chuàng)建ndarray對(duì)象,如果列表的各個(gè)元素均為單變量,創(chuàng)建的就是一維ndarray對(duì)象。

【例2-1】 創(chuàng)建一維數(shù)組分別保存學(xué)生姓名和考試科目,訪問(wèn)數(shù)組元素。

NumPy庫(kù)為ndarray對(duì)象提供了很多屬性和方法,用于查看ndarray對(duì)象的屬性,獲取數(shù)據(jù)子集,并進(jìn)行計(jì)算。

1.查看數(shù)組的屬性

2.單個(gè)數(shù)組元素訪問(wèn)

訪問(wèn)一維ndarray的數(shù)據(jù)元素與訪問(wèn)Python序列的方式相同,索引序號(hào)范圍為[0, n-1]或[-n, -1](n為數(shù)組大小)。

3.?dāng)?shù)組切片(slicing)

抽取數(shù)組的一部分元素生成新數(shù)組稱為切片操作。切片根據(jù)給出的索引,抽取出對(duì)應(yīng)的元素。

當(dāng)使用索引列表進(jìn)行切片操作時(shí),外層的方括號(hào)表示數(shù)組索引操作,內(nèi)層的方括號(hào)表示多個(gè)索引組成的列表。

索引也可以通過(guò)start:end:step形式給出,它生成一個(gè)等差數(shù)列,元素從start開(kāi)始,end-1結(jié)束,step為步長(zhǎng)。start默認(rèn)為從頭開(kāi)始,end默認(rèn)為最后一個(gè)元素結(jié)束,step默認(rèn)步長(zhǎng)為1。

4.根據(jù)條件篩選數(shù)組元素

ndarray可以使用條件表達(dá)式和關(guān)系運(yùn)算符來(lái)選擇所需要的數(shù)據(jù)元素。如篩選出names數(shù)組中值等于“王微”或“錢(qián)易銘”的元素。

條件篩選分為兩個(gè)步驟,首先利用(names=='王微')|(names=='錢(qián)易銘')條件表達(dá)式創(chuàng)建一個(gè)布爾型的數(shù)組,然后使用此對(duì)象對(duì)names內(nèi)的元素按位置選擇,值是True的選中,F(xiàn)alse的不選。分步驟實(shí)現(xiàn)代碼如下。

2.1.2 二維數(shù)組對(duì)象

使用array函數(shù)創(chuàng)建二維ndarray數(shù)組對(duì)象,初始化的列表,其元素也是列表。

【例2-2】 創(chuàng)建二維數(shù)組scores,記錄“names”中每位學(xué)生對(duì)應(yīng)“subjects”各門(mén)課程的考試成績(jī)。

創(chuàng)建函數(shù)array的參數(shù)列表的每個(gè)元素代表1位學(xué)生的成績(jī),每位學(xué)生的成績(jī)又是由7門(mén)課程成績(jī)組成的列表。scores數(shù)組每行表示1位學(xué)生各門(mén)課程的成績(jī),每列表示1門(mén)科目所有學(xué)生的成績(jī)。

1.查看數(shù)組屬性

scores是一個(gè)5行、7列的2維數(shù)組,共有35個(gè)整數(shù)類型的元素。

2.二維數(shù)組切片

二維數(shù)組切片操作的基本格式:

其中row為行序號(hào),column為列序號(hào),中間用“,”隔開(kāi)。行、列切片的表示方式與一維數(shù)組相同。如果行或列用“:”代替,表示選中對(duì)應(yīng)的所有行或列。

1)訪問(wèn)指定行、列的元素,給出行和列兩個(gè)索引值。

注意上例中在方括號(hào)中給出行切片[1,3]和列切片[0,1],表示抽取行序號(hào)為1、列序號(hào)為0,以及行序號(hào)為3、列序號(hào)為1的元素,得到一維的ndarray數(shù)組。

2)訪問(wèn)部分行元素,給出行列表即可,列索引的“:”可以省略。

3)訪問(wèn)部分列元素,如顯示所有學(xué)生數(shù)學(xué)課和英語(yǔ)課的成績(jī)。

前面的行索引“:”不能省略,否則無(wú)法識(shí)別是對(duì)列切片。

4)訪問(wèn)部分行和列數(shù)據(jù)。

訪問(wèn)索引為0和3的行中,1~3列的所有元素。

如果需要抽取指定某些行中指定列的所有元素,則需要進(jìn)行兩層切片。

首先scores[[1,3]]得到了由scores序號(hào)1、3行組成的二維ndarray對(duì)象,再在此對(duì)象上進(jìn)行切片操作,取所有行的0、1列的元素。

3.條件篩選

可以使用布爾型數(shù)組篩選訪問(wèn)其他數(shù)組的元素。用于篩選的布爾數(shù)組,需要具有與訪問(wèn)數(shù)組相同的行數(shù)或列數(shù)。如篩選“肖良英”和“方綺雯”的所有課程成績(jī)。

行索引使用(names=='肖良英')|(names=='方綺雯')布爾數(shù)組給出,表示scores中布爾數(shù)組True對(duì)應(yīng)的行被選中。列索引為冒號(hào),表示所有的列元素都選中,也可以省略。

可以對(duì)二維數(shù)組的行、列同時(shí)使用布爾表達(dá)式篩選,如顯示“肖良英”和“方綺雯”的“Math”和“Python”課程成績(jī),可以使用兩層篩選實(shí)現(xiàn)。

首先在二維數(shù)組中篩選出“肖良英”和“方綺雯”的所有成績(jī)得到一個(gè)兩行的二維數(shù)組,然后在此數(shù)組上選擇列滿足條件表達(dá)式(subjects=='Math')|(subjects=='Python')的所有行。

2.1.3 創(chuàng)建多維數(shù)組的常用方法

NumPy庫(kù)還提供了其他一些數(shù)組創(chuàng)建函數(shù),以滿足不同初始化的需求。下面列出常用的數(shù)組創(chuàng)建和初始化函數(shù)。

1.a(chǎn)range()函數(shù)

arange()函數(shù)可以根據(jù)給定的起始范圍和步長(zhǎng),生成一個(gè)由數(shù)值序列組成的數(shù)組,規(guī)則與列表索引相同。如生成從0開(kāi)始到10結(jié)束的連續(xù)整數(shù)數(shù)組。

arange()函數(shù)的3個(gè)參數(shù)可以是浮點(diǎn)數(shù)。

2.reshape()函數(shù)

使用reshape()函數(shù)可以將一維數(shù)組轉(zhuǎn)換為指定的多維數(shù)組。如將有15個(gè)連續(xù)整數(shù)的一維數(shù)組轉(zhuǎn)換為3×5的二維數(shù)組。

reshape(n,m),n表示行數(shù),m表示列數(shù)。

3.zeros()函數(shù)和ones()函數(shù)

zeros()函數(shù)和ones()函數(shù)生成指定大小的全0和全1的數(shù)組,如分別生成3×4的全0數(shù)組和4×3的全1數(shù)組。

zeros()和ones()函數(shù)的參數(shù)都為元組(n,m),n表示行數(shù),m表示列數(shù)。

思考與練習(xí)

1.一維數(shù)組訪問(wèn)。

1)在subjects數(shù)組中選擇并顯示序號(hào)1、2、4門(mén)課的名稱,使用倒序索引選擇并顯示names數(shù)組中“方綺雯”。

2)選擇并顯示names數(shù)組從2到最后的數(shù)組元素;選擇并顯示subjects數(shù)組正序2~4的數(shù)組元素。

3)使用布爾條件選擇并顯示subjects數(shù)組中的英語(yǔ)和物理科目名稱。

2.二維數(shù)組訪問(wèn)。

1)選擇并顯示scores數(shù)組的1、4行。

2)選擇并顯示scores數(shù)組中行序2、4學(xué)生的數(shù)學(xué)和Python成績(jī)。

3)選擇并顯示scores數(shù)組中所有學(xué)生的數(shù)學(xué)和藝術(shù)課程成績(jī)。

4)選擇并顯示scores數(shù)組中“王微”和“劉旭陽(yáng)”的英語(yǔ)和藝術(shù)課程成績(jī)。

3.生成由整數(shù)10~19組成的2×5的二維數(shù)組。

主站蜘蛛池模板: 时尚| 监利县| 塘沽区| 平湖市| 佳木斯市| 汉中市| 岐山县| 株洲县| 锡林浩特市| 玉林市| 射洪县| 江西省| 通州区| 商水县| 怀仁县| 太仓市| 香格里拉县| 江阴市| 阳信县| 天津市| 淮南市| 元谋县| 无棣县| 麻栗坡县| 乌拉特前旗| 县级市| 铜山县| 梅州市| 靖州| 珲春市| 阳曲县| 沂源县| 莱西市| 砀山县| 德清县| 井陉县| 藁城市| 紫阳县| 大关县| 工布江达县| 墨玉县|