- 數(shù)據(jù)科學(xué)技術(shù)與應(yīng)用
- 宋暉
- 2171字
- 2020-06-08 17:38:15
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ù)組。
- 消費(fèi)者行為學(xué)(原書(shū)第13版)
- ISO 9001質(zhì)量管理體系及認(rèn)證概論(2015版)第二版
- 張雷聲《馬克思主義基本原理概論》筆記和課后習(xí)題(含考研真題)詳解
- 分析化學(xué)實(shí)驗(yàn)技能
- 2020年甘肅省軍轉(zhuǎn)干部安置考試《行政職業(yè)能力測(cè)驗(yàn)》考點(diǎn)精講及典型題(含歷年真題)詳解
- 公司財(cái)務(wù)(第二版)
- 數(shù)控編程與加工技術(shù)
- 常耀信《美國(guó)文學(xué)簡(jiǎn)史》(第3版)筆記和考研真題詳解
- 傅獻(xiàn)彩《物理化學(xué)》(第5版)筆記和課后習(xí)題(含考研真題)詳解
- 實(shí)用漢語(yǔ)基礎(chǔ)教程
- 電子與通信技術(shù)專業(yè)英語(yǔ)(第6版)
- 機(jī)電控制技術(shù)基礎(chǔ)及創(chuàng)新實(shí)踐
- 高級(jí)會(huì)計(jì)師實(shí)務(wù)
- 北京科技大學(xué)外國(guó)語(yǔ)學(xué)院244俄語(yǔ)(二外)歷年考研真題及詳解
- 電機(jī)控制技術(shù)(第2版)