您好,登錄后才能下訂單哦!
這篇“Numpy的切片索引與高級索引怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Numpy的切片索引與高級索引怎么使用”文章吧。
ndarray對象的內(nèi)容可以通過切片來訪問,與 Python 中 list 的切片操作完全一樣。 使用slice 并設(shè)置start, stop 及 step 參數(shù)進行;舉例如下:
a = slice(2,9,2) # 2為起點,9為終點,間隔為2 b = np.arange(0,10,1) # b: [0 1 2 3 4 5 6 7 8 9] print(b[a]) # 輸出:[2 4 6 8]
使用方式與slice相同,上面的例子可以書寫為:
b = np.arange(0,10,1) print(b[2:9:2]) # 輸出:[2 4 6 8]
注意:
切片時,中括號[]
內(nèi)數(shù)字之間的符號為冒號:
, 參數(shù)為:start:stop:step
若中括號[]
內(nèi)只有一個數(shù)字,則返回該索引對應(yīng)的值;例如:b[2]
則返回 2
若中括號[]
為[2:]
,則返回起始位置與后面的所有值;例如:b[2:]
則返回 [2 3 4 5 6 7 8 9]
若中括號[]
為[2:6]
,則返回起始位置與終止位置之間的所有值;例如:b[2:6]
,返回[2 3 4 5]
冒號:
代替所有舉例如下:
a = np.array([[1,2,3],[3,4,5],[4,5,6]]) print (a[:,1]) # 第2列元素,輸出:[2 4 5] print (a[1,:]) # 第2行元素,輸出:[3 4 5] print (a[:,1:]) # 第2列及剩下的所有元素,輸出:[[2 3] [4 5] [5 6]]
在高級索引中,最為有用的便是:布爾索引; 簡單來說就是,在切片的中括號內(nèi)[],使用篩選條件,該條件會返回一個布爾數(shù)據(jù)作為Mask,將需要的數(shù)據(jù)選取出來;實際上,我們并不需要知道Numpy是如何選取出來數(shù)據(jù)的,只要只要如何使用即可;舉例如下:
b = np.arange(0,10,1) print(b[b>5]) # [6 7 8 9] print(b[(b>5) & (b<8)]) # [6 7]
注意點一:應(yīng)用多個條件時,可以使用 &
, 各個條件需要放在()
內(nèi);如上例中的:b[(b>5) & (b<8)]
注意點二:布爾索引不一定要對數(shù)組中的所有元素,也可以針對某一行或者某一列進行篩選;舉例如下:
a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) print(a[(a[:,0]>2) & (a[:,1]<10)]) # 輸出:[[4 5 6] [7 8 9]] # (a[:,0]>2) 選擇出第一列大于2的所有行; # (a[:,1]<10) 選擇出第二列小于10的所有行,然后取交集得到最后結(jié)果;
花式索引(Fancyindexing)是一個NumPy術(shù)語,它指的是利用整數(shù)數(shù)組進行索引。假設(shè)我們有一個8×4數(shù)組:
a = np.arange(32).reshape(8,4)
通過花式索引,我們可以進行如下操作:
選出指定的行,例如選出第1,3,5,7 行: print(a[[1,3,5,7]])
, 輸出為:
也可以傳入負數(shù),選出倒數(shù)的行,例如選出最后3行: print(a[[-3,-2,-1]])
, 輸出為:
也可以傳入多個索引數(shù)組,返回對應(yīng)值的一維數(shù)組,例如選出 (2,2), (3,3), (5,3) 三個數(shù): print(a[[2,3,5],[2,3,3]])
, 輸出為:
選出指定的列,例如選出第0,1, 3列:print(a[:,[1,2,3]])
, 輸出為:
選出指定的行與指定的列,例如選出第0,2,3列,第2,5,6 行的一個3*3數(shù)組; print(a[[2,5,6]][:,[0,2,3]])
, 輸出為:
在上面的基礎(chǔ)上,還可以通過交換輸入的順序,調(diào)整輸出的順序,例如:想要調(diào)換2,3列的順序,同時調(diào)換 2,6 行的順序;print(a[[6,5,2]][:,[0,3,2]])
以上就是關(guān)于“Numpy的切片索引與高級索引怎么使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。