第一章總結(jié)了有關(guān)numpy庫中array對象的相關(guān)構(gòu)造方法以及array對象的比較重要的成員方法单料,本章將總結(jié)矩陣的索引操作。
索引基礎(chǔ)
1.使用“[ ]”握础,(方括號)操作符索引矩陣元素辐董。
2.“a:b”,表達式產(chǎn)生從a到b的序列。(常用作切片器(slicing))
索引方法
1.自然索引
使用"[ ]"操作符禀综,對array 對象的某一維度進行索引简烘。
#自然索引實例
x=np.arange(10).reshape(2,5) ? ?#產(chǎn)生shape=2*5的矩陣
a=x[1,1] ? ?#獲取(2,2)的值(索引單位為兩個維度)
b=x[1] ? ?#獲取第二行元素(索引單位為一個維度)
2.數(shù)組索引
????????numpy array 對象可以被其它array對象(或者其它任何可以被轉(zhuǎn)換成array對象的序列)索引定枷。此時當做索引的數(shù)組的內(nèi)容是位置孤澎。注意,所有的數(shù)組索引返回的都是原來array對象的拷貝欠窒,(copy)覆旭,但是切片(slicing)返回原來對象的視圖(view),操作會影響原對象岖妄。
#數(shù)組索引實例
x=np.arange(10).reshape(2,5)????#產(chǎn)生shape=2*5的矩陣
a=x[np.array([0,1]),np.array([3,2])]????#獲取(0,3)元素和(1,2)元素型将,兩個數(shù)組構(gòu)成坐標對
b=x[0:1,3:2]????#輸出同上,采用“:”操作符產(chǎn)生索引數(shù)組
c=x[np.array([0,1]),2]????#獲燃雠啊(0,2)和(1,2)元素七兜。此處第二維采用的brocasting技術(shù),索引2 廣播為(2,2)
e=x[0:1:1,0:4:2]????#start:stop:steps福扬,產(chǎn)生序列腕铸。此處steps指定了步長
f=x[::-1,2]????#::-1,缺省sart 表示從第一個元素開始忧换,缺省steps表示步長為1恬惯,缺省stop表示最后一個元素向拆。
s=x[::1]????#以第一個維度為單位進行索引
g=np.arange(10)
h=g[np.array([1,1],[2,3])????#輸出h.shape=(2,2)亚茬,輸出數(shù)組的維度和輸入數(shù)組的維度同等。輸入索引數(shù)組的單個元素作為索引浓恳。
總結(jié):數(shù)組索引技術(shù)之下刹缝,返回的數(shù)組形狀與索引數(shù)組以及沒用使用的維度相關(guān)碗暗。同時,索引中存在broadcasting技術(shù)梢夯,構(gòu)成坐標對言疗。
3.布爾索引(mask索引)
布爾索引中所使用的布爾索引數(shù)組必須和被索引的數(shù)組維度相同,缺省維度操作與“:”操作效果相同——作為一個整體颂砸。一般來講噪奄,可以由原來的矩陣做邏輯運算產(chǎn)生布爾索引矩陣。布爾索引產(chǎn)生的返回數(shù)組是原數(shù)組的copy人乓,換而言之勤篮,修改返回結(jié)果不會影響到原來數(shù)組的值。
#布爾索引實例
x=np.arange(30).reshape(2,3,5)
b=np.array([[True,True,False],[False,True,True]]) ? ?#形狀為2*3色罚,缺省第三個維度
x[b] ? ?#輸出為4*4(b矩陣中有4個True)
4.增加數(shù)組維度
np.newaxis對象可以在已有的數(shù)組之上構(gòu)造出多一個維度的數(shù)組碰缔。
x=np.arange(10)
print(x[:,np.newaxis]) ? ?#shape=n*1
print(x[np.newaxis,:]) ? ?#shape=1*n
>>>[[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]]
>>>[[0 1 2 3 4 5 6 7 8 9]]
5.tuples和array索引的區(qū)別
“[ ]”作為索引時,為索引對應位置上的值戳护,產(chǎn)生一個同型的矩陣(索引維數(shù)較被索引的array對象低時候金抡,采用broadcasting技術(shù)),"( )"出現(xiàn)在array對象中的時候,當做索引一個array元素腌且。
x=np.arange(20).reshape(5,4)
print(x[[2,3,4]]) ? ?#產(chǎn)生一個array對象
print(x[(1,2)]) ? ?#返回一個數(shù)