深入了解NumPy 高級(jí)索引
NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整數(shù)和切片的索引外,數(shù)組可以由整數(shù)數(shù)組索引、布爾索引及花式索引。
整數(shù)數(shù)組索引
以下實(shí)例獲取數(shù)組中(0,0),(1,1)和(2,0)位置處的元素。
import numpy as np x = np.array([[1, 2], [3, 4], [5, 6]]) y = x[[0,1,2], [0,1,0]] print (y)
輸出結(jié)果為:
[1 4 5]
以下實(shí)例獲取了 4X3 數(shù)組中的四個(gè)角的元素。 行索引是 [0,0] 和 [3,3],而列索引是 [0,2] 和 [0,2]。
import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print ('我們的數(shù)組是:' ) print (x) print ('\n') rows = np.array([[0,0],[3,3]]) cols = np.array([[0,2],[0,2]]) y = x[rows,cols] print ('這個(gè)數(shù)組的四個(gè)角元素是:') print (y)
輸出結(jié)果為:
我們的數(shù)組是:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
這個(gè)數(shù)組的四個(gè)角元素是:
[[ 0 2]
[ 9 11]]
返回的結(jié)果是包含每個(gè)角元素的 ndarray 對(duì)象。
可以借助切片 : 或 … 與索引數(shù)組組合。如下面例子:
import numpy as np a = np.array([[1,2,3], [4,5,6],[7,8,9]]) b = a[1:3, 1:3] c = a[1:3,[1,2]] d = a[...,1:] print(b) print(c) print(d)
輸出結(jié)果為:
[[5 6]
[8 9]]
[[5 6]
[8 9]]
[[2 3]
[5 6]
[8 9]]
布爾索引
我們可以通過(guò)一個(gè)布爾數(shù)組來(lái)索引目標(biāo)數(shù)組。
布爾索引通過(guò)布爾運(yùn)算(如:比較運(yùn)算符)來(lái)獲取符合指定條件的元素的數(shù)組。
以下實(shí)例獲取大于 5 的元素:
import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print ('我們的數(shù)組是:') print (x) print ('\n') # 現(xiàn)在我們會(huì)打印出大于 5 的元素 print ('大于 5 的元素是:') print (x[x > 5])
輸出結(jié)果為:
我們的數(shù)組是:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
大于 5 的元素是:
[ 6 7 8 9 10 11]
以下實(shí)例使用了 ~(取補(bǔ)運(yùn)算符)來(lái)過(guò)濾 NaN。
import numpy as np a = np.array([np.nan, 1,2,np.nan,3,4,5]) print (a[~np.isnan(a)])
輸出結(jié)果為:
[ 1. 2. 3. 4. 5.]
以下實(shí)例演示如何從數(shù)組中過(guò)濾掉非復(fù)數(shù)元素。
import numpy as np a = np.array([1, 2+6j, 5, 3.5+5j]) print (a[np.iscomplex(a)])
輸出如下:
[2.0+6.j 3.5+5.j]
花式索引
花式索引指的是利用整數(shù)數(shù)組進(jìn)行索引。
花式索引根據(jù)索引數(shù)組的值作為目標(biāo)數(shù)組的某個(gè)軸的下標(biāo)來(lái)取值。對(duì)于使用一維整型數(shù)組作為索引,如果目標(biāo)是一維數(shù)組,那么索引的結(jié)果就是對(duì)應(yīng)位置的元素;如果目標(biāo)是二維數(shù)組,那么就是對(duì)應(yīng)下標(biāo)的行。
花式索引跟切片不一樣,它總是將數(shù)據(jù)復(fù)制到新數(shù)組中。
1、傳入順序索引數(shù)組
import numpy as np x=np.arange(32).reshape((8,4)) print (x[[4,2,1,7]])
輸出結(jié)果為:
[[16 17 18 19]
[ 8 9 10 11]
[ 4 5 6 7]
[28 29 30 31]]
2、傳入倒序索引數(shù)組
import numpy as np x=np.arange(32).reshape((8,4)) print (x[[-4,-2,-1,-7]])
輸出結(jié)果為:
[[16 17 18 19]
[24 25 26 27]
[28 29 30 31]
[ 4 5 6 7]]
3、傳入多個(gè)索引數(shù)組(要使用np.ix_)
import numpy as np x=np.arange(32).reshape((8,4)) print (x[np.ix_([1,5,7,2],[0,3,1,2])])
輸出結(jié)果為:
[[ 4 7 5 6]
[20 23 21 22]
[28 31 29 30]
[ 8 11 9 10]]
以上就是深入了解NumPy 高級(jí)索引的詳細(xì)內(nèi)容,更多關(guān)于NumPy 高級(jí)索引的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python中條件選擇和循環(huán)語(yǔ)句使用方法介紹
Python中也存在條件選擇和循環(huán)語(yǔ)句,其風(fēng)格和C語(yǔ)言、java的很類似,不過(guò)在書寫語(yǔ)法上還是存在一些區(qū)別的,接下來(lái)同大家一起了解下,希望可以幫助你更好的學(xué)習(xí)python,感興趣的你可不要錯(cuò)過(guò)了哈2013-03-03如何使用PyCharm將代碼上傳到GitHub上(圖文詳解)
這篇文章主要介紹了如何使用PyCharm將代碼上傳到GitHub上(圖文詳解),文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04python寫入已存在的excel數(shù)據(jù)實(shí)例
下面小編就為大家分享一篇python寫入已存在的excel數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05python 集合 并集、交集 Series list set 轉(zhuǎn)換的實(shí)例
今天小編就為大家分享一篇python 集合 并集、交集 Series list set 轉(zhuǎn)換的實(shí)例。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05pandas進(jìn)階教程之Dataframe的apply方法
DataFrame中的apply方法就是將函數(shù)應(yīng)用到由列或行形成的一維數(shù)組上,下面這篇文章主要給大家介紹了關(guān)于pandas進(jìn)階教程之Dataframe的apply方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09基于python對(duì)B站收藏夾按照視頻發(fā)布時(shí)間進(jìn)行排序的問(wèn)題
這篇文章主要介紹了基于python對(duì)B站收藏夾按照視頻發(fā)布時(shí)間進(jìn)行排序,在實(shí)現(xiàn)過(guò)程中中間程序可能因?yàn)楦鞣N原因掛掉,因此在中間加入了儲(chǔ)存中間狀態(tài)的功能,否則每次掛掉都要重新爬速度非常慢,本文給大家介紹具體使用方法,一起看看吧2021-05-05Python異常繼承關(guān)系和自定義異常實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Python異常繼承關(guān)系和自定義異常實(shí)現(xiàn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02