numpy 学习汇总33 - 索引切片( 初步学习 tcy)
生活随笔
收集整理的這篇文章主要介紹了
numpy 学习汇总33 - 索引切片( 初步学习 tcy)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
索引切片 2018/6/18 2018/11/26=====================================================================
1. 索引分類:字段訪問,基本切片,高級索引
形式:array[beg:end:step,]# 參數 beg: 索引; [0,end);step: 間隔;# 函數slice(:)和ellipsis(…) Ellipsis和newaxis物體也可以穿插其中x[slice(2,7,2)]a=np.array([[1,2,3],[4,5,6]])#array([[1, 2, 3], [4, 5, 6]])b=a[:,np.newaxis,:] #array([[[1, 2, 3]],[[4, 5, 6]]])a.shape #(2, 3)b.shape #(2, 1, 3)
實例格式:1D格式:a[start:end:step]=value #若是標量會自動傳播2D格式:a[start:end:step , start:end:step] #類似Python切片;維度1對應行,維度2對應列2D格式:a[start:end:step] [start:end:step] #相當于b=a[ ];a[ ][:]=b[:] 數據缺失則為全部數據3D格式:a[,,,] or a[][][]注意:1)逗號隔開每個維度;索引為':'表示整個切片; '...'連續;2)切片是視圖,沿一個軸方向進行; 返回數組中元素是原數組元素的索引,修改影響原數組值(Python不會)3)Python(C/C++)索引從0開始.Fortran或Matlab索引從1開始4)newaxis選擇元組中的每個對象用于將所得選擇的維度擴展一個單位長度維度。添加的維度是newaxis 對象在選擇元組中的位置。2.切片
====================================================================
# 實例1:1D
a=np.array([1, 2, 3, 4, 5, 6]) # array([1, 2, 3, 4, 5, 6])a[0] #1a[0:] # array([1, 2, 3, 4, 5, 6])
a[0:1] # array([1])# a[1:5:2] ,a[:4],a[1:3] ,a[::2] ,a[3:] ,a[::-1]b=a[:]
b[:]=-1 #賦值
a #array([-1, -1, -1, -1, -1, -1])# 實例2:2D
a=np.array([[1,2,3],[4,5,6]])#array([[1, 2, 3],[4, 5, 6]])a[0] # array([1, 2, 3]) 第1行數據
a[0][1] # 2 從第1行數據中選取第2個數據
a[0][1:3] # array([2, 3]) 從第1行數據中選取第2,3個數據a[0,:] # array([1, 2, 3]) 第1行數據
a[0,1:2] # array([2]) 行為第1行,列為2列 區域的數據b=a[0,:] # array([1, 2, 3])
b[:]=-1 # 賦值
a # array([[-1, -1, -1],[ 4, 5, 6]])# 實例3:3D# 多維數組省略后面索引返回一個維度低一點的ndarray 數據(包含有高一級維度上的所有數據注釋1 )
# 注釋1 :括號外面的“維度”是一維、二維、三維、四維之類的意思,括號里面的應該理解為“軸” .
# 也就是說,這里指的是“返回的低維數組含有原始高維數某條軸上的所有 數據” 。a=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])a[0] #array([[1, 2, 3],[4, 5,6]])
a[0][1] #array([4, 5,6])
a[0][1][2] #6a[0,0:2,0:3] # array([[1, 2, 3],[4, 5, 6]])
a[0,1:2,0:3] # array([[4, 5, 6]])
a[0,1:2,2:3] # array([[6]])b=a[0,1:2,0:3] # array([[4, 5, 6]])
b[:]=-1 # 賦值
a # array([[[ 1, 2, 3],[-1, -1, -1]],[[ 7, 8, 9], [10, 11, 12]]])
===================================================================3.數組索引3.1.花式索引
# 實例1:1D
a = np.arange(10)+10#一維數組
index= np.array( [ [ 3, 4], [ 9, 7 ] ] )
a[index] # 和索引形狀相同 #array([[ 13, 14], [19, 17]])# 實例2:2D
a = np.arange(32).reshape(4,8) # 多維數組# array([[ 0, 1, 2, 3, 4, 5, 6, 7],# [ 8, 9, 10, 11, 12, 13, 14, 15],# [16, 17, 18, 19, 20, 21, 22, 23],# [24, 25, 26, 27, 28, 29, 30, 31]])
row= np.array( [ [0,1], [2,3] ] ) #所有元素<4 m;索引數組必須具有相同形狀
column= np.array( [ [4,5], [6,7] ] )#所有元素<8 n;#索引數組必須具有相同形狀
a[row,column] # array([[ 4, 13],[22, 31]]) 原數據(0,4) (1,3) (2,46) (3,7)等價于:lst= [i,j];a[lst]a[tuple(np.array( [i,j] ))]
----------------------------------------------------------------------------------------------------------
3.2.布爾數組索引#創建數據的副本# 實例1:每個維度的1D布爾數組a = np.arange(12).reshape(3,4)b1 = np.array([False,True,True]) # first dim selectionb2 = np.array([True,False,True,False]) # second dim selection
a[b1] #array([[ 4, 5, 6, 7],[ 8, 9, 10, 11]])
a[:,b2] # array([[ 0, 2],[ 4, 6], [ 8, 10]])
a[b1,b2] # array([ 4, 10]) 奇怪的實例# 注意:1D布爾數組的長度必須與要分片的維(或軸)的長度一致。# 實例2:同時使用逗號分割索引來沿著多個軸索引(有些和Python索引不同)
a=np.arange(12).reshape(3,4)
m=np.matrix(a)a[:,1]; # [1 5 9] 上下不同
m[:,1] #matrix([[1],[5],[9]])a[:,[1,3]] #數組1,3列 等價下面
a[:,].take([1,3],axis=1)# array([[ 1, 3],[ 5, 7], [ 9, 11]])
m[:,[1,3]] # matrix([[ 1, 3],[ 5, 7], [ 9, 11]])a[1:,].take([1,3],axis=1)# array([[ 5, 7],[ 9, 11]])#跳過第一行
a[np.ix_((1,2),(1,3))] # array([[ 5, 7],[ 9, 11]])#跳過第一行
m[np.ix_((1,2),(1,3))] # matrix([[ 5, 7],[ 9, 11]])#跳過第一行a[0,:]>1 # array([False, False, True, True])
a[:,a[0,:]>1] #array([[ 2, 3], [ 6, 7],[10, 11]])#第一行大于1的列
m[:,m.A[0,:]>1] #matrix([[ 2, 3],[ 6, 7],[10, 11]])#第一行大于1的列 上下不同(A矩陣的數組屬性)#矩陣兩個方向有條件地切片:
a[a[:,0]>2,a[0,:]>1] # array([ 6, 11])
m[m.A[:,0]>2,m.A[0,:]>1] # matrix([[ 6, 11]])a[np.ix_(a[:,0]>2,a[0,:]>1)] # array([[ 6, 7], [10, 11]])
m[np.ix_(m.A[:,0]>2,m.A[0,:]>1)] # matrix([[ 6, 7], [10, 11]])# Ellipsis擴展為:制作與長度相同的選擇元組所需的對象數x.ndim。
a[...,0]# array([0, 4, 8])
a[0,...]# array([0, 1, 2, 3])a=np.arange(12).reshape(2,2,3) # array([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8],[ 9, 10, 11]]])
a[...,0] # array([[0, 3],[6, 9]])
a[0,...] # array([[0, 1, 2],[3, 4, 5]])=====================================================================
4.備注:
# 切片說明:
a[1,1] #一維數組;訪問單元素;也可以a[1]
a[::2] #一位數組;訪問多元素;以2為步長對數組進行切分
a[1,6] #一維數組;訪問多元素(第2個到第5個元素)
a[1,2,3] #多維數組;訪問單元素
a[0,2:4,…] #多維數組;訪問多元素(第1塊第2,3行元素)
a[1,…,2:4] #多維數組;訪問多元素(第2塊第2,3列元素)
a[1,…] #多維數組;訪問第2個元素塊
a[…,1] #多維數組;訪問多元素(所有塊的第1行元素)
a[:2,:3].copy()
a[::-1] #反序
a[0,...] #按行取元素;
a[…,0] #按列取元素
=====================================================================
總結
以上是生活随笔為你收集整理的numpy 学习汇总33 - 索引切片( 初步学习 tcy)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四国军棋的启示
- 下一篇: 全国行政边界json数据echarts地