深入了解NumPy 高級索引
NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整數(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]
以下實例獲取了 4X3 數(shù)組中的四個角的元素。 行索引是 [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 ('這個數(shù)組的四個角元素是:') print (y)
輸出結(jié)果為:
我們的數(shù)組是:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
這個數(shù)組的四個角元素是:
[[ 0 2]
[ 9 11]]
返回的結(jié)果是包含每個角元素的 ndarray 對象。
可以借助切片 : 或 … 與索引數(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]]
布爾索引
我們可以通過一個布爾數(shù)組來索引目標(biāo)數(shù)組。
布爾索引通過布爾運(yùn)算(如:比較運(yùn)算符)來獲取符合指定條件的元素的數(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)在我們會打印出大于 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]
以下實例使用了 ~(取補(bǔ)運(yùn)算符)來過濾 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ù)組中過濾掉非復(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ù)組的某個軸的下標(biāo)來取值。對于使用一維整型數(shù)組作為索引,如果目標(biāo)是一維數(shù)組,那么索引的結(jié)果就是對應(yīng)位置的元素;如果目標(biāo)是二維數(shù)組,那么就是對應(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、傳入多個索引數(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 高級索引的詳細(xì)內(nèi)容,更多關(guān)于NumPy 高級索引的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何使用PyCharm將代碼上傳到GitHub上(圖文詳解)
這篇文章主要介紹了如何使用PyCharm將代碼上傳到GitHub上(圖文詳解),文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04python寫入已存在的excel數(shù)據(jù)實例
下面小編就為大家分享一篇python寫入已存在的excel數(shù)據(jù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05python 集合 并集、交集 Series list set 轉(zhuǎn)換的實例
今天小編就為大家分享一篇python 集合 并集、交集 Series list set 轉(zhuǎn)換的實例。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05pandas進(jìn)階教程之Dataframe的apply方法
DataFrame中的apply方法就是將函數(shù)應(yīng)用到由列或行形成的一維數(shù)組上,下面這篇文章主要給大家介紹了關(guān)于pandas進(jìn)階教程之Dataframe的apply方法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09基于python對B站收藏夾按照視頻發(fā)布時間進(jìn)行排序的問題
這篇文章主要介紹了基于python對B站收藏夾按照視頻發(fā)布時間進(jìn)行排序,在實現(xiàn)過程中中間程序可能因為各種原因掛掉,因此在中間加入了儲存中間狀態(tài)的功能,否則每次掛掉都要重新爬速度非常慢,本文給大家介紹具體使用方法,一起看看吧2021-05-05Python異常繼承關(guān)系和自定義異常實現(xiàn)代碼實例
這篇文章主要介紹了Python異常繼承關(guān)系和自定義異常實現(xiàn)代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02