《python科學技算》之多維數組的下標存取


多維數組的下標是一個長度上與數組維數相同的元組。

a=np.arange(3*4*5).reshape(3,4,5)

lidx=[[1],[2],[3]]
aidx=np.array(lidx)
 
a[lidx] # a[tuple(lidx)]; a[([0],[1],[2])]
a[aidx] # a[aidx,:,:]

 下標元組的所有元素都是切片和整數,它作為下標得到的原始數組的視圖,與原始數組共享數據存儲空間。

僅有整數數組作為下標,遵循以下步驟:將所有數組進行廣播(找維數最大的數組,長度不足前面補1,再找各個維數上shape的最大值,此為廣播后數組的最大值,將shape不足的部分cope已有的數組。),對於b=a[i0,i1,i2]來說,b[0,0,0]=a[i0[0,0,0],i1[0,0,0],i2[0,0,0]],注意,此時的i0,i1,i2都為廣播后的數組。

當存在切片時,如果整數數組間沒有下標,結果數組的shape為,將整數數組部分替換為廣播之后的shape。如a.shape=(3,4,5), i0與i1廣播后為(2,2,3),則a[1:3,i0,i3].shape()=(2,2,2,3)

如果下標元組中整數數組不是連續的,則數組的shape為整數數組廣播后的shape加上切片元素對應的形狀,如a[i0,:,i1].shape()=(2,2,3,4),(2,2,3)+a的第一軸的長度為4。

如果使用布爾數組作為下標對象,或下標對象含有數組,相當於用nonzero()(返回布爾數組中值不為0的元素下標)將布爾數組轉換為一組整數數組,然后用整數數組進行下標運算


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM