引言NumPy是Python的一個(gè)擴(kuò)展庫(kù),負(fù)責(zé)數(shù)組和矩陣運(yùn)行,。相較于傳統(tǒng)Python,,NumPy運(yùn)行效率高,速度快,,是利用Python處理數(shù)據(jù)必不可少的工具,。 這個(gè)NumPy快速入門(mén)系列分為四篇,包含了NumPy大部分基礎(chǔ)知識(shí),,每篇閱讀時(shí)間不長(zhǎng),,但內(nèi)容含量高。大家最好親自碼一遍代碼,,這樣可以更有收獲,。 前面的課程: Python進(jìn)階之NumPy快速入門(mén)(一) Python進(jìn)階之NumPy快速入門(mén)(二) 概要1、掌握NumPy中的數(shù)組操作,輕松改變數(shù)組形狀,; 2,、掌握NumPy中的字符串,輕松應(yīng)對(duì)文件處理,; 3,、掌握Python中的統(tǒng)計(jì)函數(shù),輕松進(jìn)行統(tǒng)計(jì)分析,。 第七節(jié).數(shù)組操作我們將數(shù)組操作分成以下幾種類型,,然后分別介紹
數(shù)組變形 可以實(shí)現(xiàn)數(shù)組變形的函數(shù)有好幾個(gè):
代碼: import numpy as np
B = A.reshape(2,6)
D = B.ravel()
講解: 原始數(shù)組A是一個(gè)從0到11的一維數(shù)組,;B是通過(guò)reshape函數(shù)改造成2*6的二維數(shù)組,;C和D分別從B展開(kāi)降到一維。其中C是按列順序降維,,而D是按照行順序,。 運(yùn)行結(jié)果: [ 0 1 2 3 4 5 6 7 8 9 10 11] [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]] [ 0 6 1 7 2 8 3 9 4 10 5 11] [ 0 1 2 3 4 5 6 7 8 9 10 11] 數(shù)組翻轉(zhuǎn) 從數(shù)學(xué)角度而言,二維數(shù)組就是矩陣,。在矩陣操作中,,有一項(xiàng)叫轉(zhuǎn)置,是將矩陣元素位置的行列互換,,比如原來(lái)在(1,2)這個(gè)位置的元素,,會(huì)和(2,1)這個(gè)位置的元素進(jìn)行互換,。在Numpy中我們有兩種方式來(lái)實(shí)現(xiàn)數(shù)組的翻轉(zhuǎn):
代碼: A = np.arange(0,8).reshape(4,2)
C = A.T
講解: A是一個(gè)4*2的數(shù)組,B和C分別通過(guò)兩種方式翻轉(zhuǎn)A,,雖然函數(shù)不同,,但是結(jié)果卻是一樣的。 運(yùn)行結(jié)果: [[0 1] [2 3] [4 5] [6 7]] [[0 2 4 6] [1 3 5 7]] [[0 2 4 6] [1 3 5 7]] 數(shù)組連接 數(shù)組連接顧名思義是將兩個(gè)或多個(gè)數(shù)組按照一定的方式連接起來(lái),,常用的數(shù)組連接有以下幾種函數(shù):
代碼: A = np.array([[1,2],[3,4]])
print (np.concatenate((A,B),axis = 1))
print (np.hstack((A,B)))
講解: A和B都是2*2的數(shù)組,,我們分別用四個(gè)函數(shù)去連接它們,。第一個(gè)是concatenate函數(shù),axis=1表示沿著第二個(gè)軸,,也就是水平連接,;第二個(gè)是stack函數(shù),同樣是沿著第二個(gè)軸,,在這里我們省略了axis參數(shù),;第三個(gè)是hstack,豎直方向連接,;第四個(gè)是vstack,,水平方向連接。 運(yùn)行結(jié)果: [[1 2 5 6] [3 4 7 8]] [[[1 2] [5 6]] [[3 4] [7 8]]] [[1 2 5 6] [3 4 7 8]] [[1 2] [3 4] [5 6] [7 8]] 數(shù)組分割 數(shù)組分割相當(dāng)于數(shù)組連接的逆向操作,,將一個(gè)大數(shù)組分割成好幾個(gè)數(shù)組,。常用的函數(shù)有三個(gè):
代碼: A = np.arange(0,16).reshape(4,4)
print (np.hsplit(A,2))
講解: A是一個(gè)4*4的二維數(shù)組,我們用了三種方式去分割,。 運(yùn)行結(jié)果: [array([[0, 1, 2, 3], [4, 5, 6, 7]]), array([[ 8, 9, 10, 11], [12, 13, 14, 15]])] [array([[ 0, 1], [ 4, 5], [ 8, 9], [12, 13]]), array([[ 2, 3], [ 6, 7], [10, 11], [14, 15]])] [array([[0, 1, 2, 3], [4, 5, 6, 7]]), array([[ 8, 9, 10, 11], [12, 13, 14, 15]])] 第八節(jié).NumPy字符串一直以來(lái),,我們處理的都是由數(shù)字組成的NumPy數(shù)組,其實(shí)NumPy中字符串也十分重要,,尤其是在涉及到文件處理的時(shí)候,,因?yàn)楹芏辔募热鐃xt文檔只支持字符串(string)格式的讀寫(xiě)。因此學(xué)會(huì)常用NumPy字符串函數(shù)是很有必要的,。 字符串連接 負(fù)責(zé)字符串連接的有兩個(gè)函數(shù),,
代碼: import numpy as np
print(np.char.add(['hello','hi'],[' world',' universe']))
講解: 我們發(fā)現(xiàn)當(dāng)加法函數(shù)中的數(shù)組里面字符串元素不止一個(gè)的時(shí)候,,連接會(huì)按照一一對(duì)應(yīng)的方式配對(duì)連接。 運(yùn)行結(jié)果: ['hello world'] ['hello world' 'hi universe'] Love you Love you Love you 大小寫(xiě) 表格中關(guān)于大小寫(xiě)的函數(shù)有四個(gè),,我們分別來(lái)看看它們都是什么功能,。
代碼: print (np.char.capitalize('love you'))
print (np.char.lower('LOVE YOU'))
講解: 我們分別用例子嘗試了一下大小寫(xiě)函數(shù),,還是非常容易的,。 運(yùn)行結(jié)果: Love you I Love You love you LOVE YOU 符號(hào)分割 分割操作在處理文件時(shí)候很重要,因?yàn)槲覀円话阋砸欢ǜ袷?,比如用逗?hào)或者空格隔開(kāi)數(shù)據(jù)而且每一行格式盡量一樣,。我們介紹兩種分割函數(shù),它們復(fù)制不同尺度:
代碼: print (np.char.split ('www.youtube.com', sep = '.'))
講解: 注意到調(diào)用行分割的時(shí)候,我們字符串中\(zhòng)n是換行符,,因此會(huì)在這個(gè)位置進(jìn)行分割,。 運(yùn)行結(jié)果: ['www', 'youtube', 'com'] ['i', 'love you.'] 符號(hào)連接 既然有按照符號(hào)進(jìn)行分割,其逆操作按符號(hào)進(jìn)行連接,。這個(gè)函數(shù)就是join. 代碼: print (np.char.join([':','-'],['love','google'])) 講解: 這里有兩個(gè)連接符冒號(hào)和一橫,,分別對(duì)應(yīng)兩個(gè)字符串。 運(yùn)行結(jié)果: ['l:o:v:e' 'g-o-o-g-l-e'] 第九節(jié).NumPy統(tǒng)計(jì)函數(shù)最大,,最小值
如果我們指定某個(gè)軸,,那么它們將會(huì)返回沿著軸的的最大或者最小的元素,即一個(gè)一維數(shù)組,。當(dāng)軸的參數(shù)是0的時(shí)候,,會(huì)返回沿著縱軸最大或者最小元素,;當(dāng)軸的參數(shù)是1的時(shí)候,會(huì)返回沿著橫軸最大或者最小的元素,。如果我們不設(shè)定軸的參數(shù),,那么結(jié)果會(huì)返回這個(gè)數(shù)組的最大或者最小的元素。 代碼:
A = np.arange(12).reshape(3,4)
print (np.amax(A,1))
講解: 我們建立了一個(gè)形狀為(3,4)的數(shù)組,。第一個(gè)是求沿著縱軸每個(gè)列中最小的元素,,因?yàn)閿?shù)組有四列,因而會(huì)選出四個(gè)數(shù)字,;第二個(gè)是求沿著橫軸每個(gè)行中最大的元素,,因?yàn)閿?shù)組有三行,因而會(huì)選出三個(gè)數(shù)字,。最后我們沒(méi)有設(shè)定軸,,因?yàn)闀?huì)返回A數(shù)組中最大的元素。 運(yùn)行結(jié)果: [0 1 2 3] [ 3 7 11] 11 中位數(shù),,平均值,,方差
代碼: A = np.arange(9).reshape(3,3)
print (np.median(A,0))
print (np.mean(A))
print (np.mean(A,1)) 講解: 這次我們建立了一個(gè)形狀為(3,3)的數(shù)組,,把三種關(guān)于軸參數(shù)的情況都試了一次,,大家對(duì)照規(guī)則自己想一下答案,再和打印結(jié)果對(duì)照一下,。按照慣例,,mean函數(shù)的三種用法都嘗試一遍。注意到,,結(jié)果會(huì)同中位數(shù)結(jié)果一樣,,因?yàn)锳數(shù)組行或列的均值也是中位數(shù)。 運(yùn)行結(jié)果: 4.0 [3. 4. 5.] [1. 4. 7.] 4.0 [3. 4. 5.] [1. 4. 7.] |
|
來(lái)自: 網(wǎng)摘文苑 > 《NumPy》