python基礎---有關nparray----切片和索引(一)
阿新 • • 發佈:2019-01-29
Numpy最重要的一個特點就是其N維陣列物件,即ndarray,該物件是一種快速而靈活的大資料集容器,實際開發中,我們可以利用這種陣列對整塊資料執行一些數學運算。
有關ndarray,我們就從最簡單的一維陣列操作以及其構造開始說起:
import numpy as np if __name__ == '__main__': print(1) #輸出一個字典物件i+rand print({i :np.random.rand() for i in range(2)}) #輸出字典物件i+list(rand) print({i: np.random.rand(2) for i in range(2)}) #在變數前面加一個?問號,可以將有關該物件的一些通用資訊顯示出來 a=[] for i in range(3): #這裡b就是一個有3個隨機小數的陣列 b = np.random.rand(3) print(b.shape) print(b) a.append(b) print(a) #從管道中輸出a # print(a.pop(0)) # print(a) #通過array這個方法將a陣列轉成nparray c=np.array(a) print("c============",c) #這裡隨機獲取一個二維陣列 d=np.empty((3,6)) print(d) #np的基本索引和切片 #先生成一個從0到10的一維陣列[0 1 2 3 4 5 6 7 8 9] arr=np.arange(10) #針對這個np我們可以簡單切片,比如我要獲取5,6,7可以通過這個方法:arr[開始的index,結束的index],這裡的index從0開始, #左包含右不包含 arr1=arr[5:8] print(arr1) #對一個切片進行賦值時,該值會傳播整個選取:比如arr[5:8]=12的輸出值就是[ 0 1 2 3 4 12 12 12 8 9]arr[5:8]=12 print(arr) #如果操作需要,我們可以針對切片中再一次進行切片賦值 arr_slice=arr[4:8] #[4,12,12,12] print(arr_slice[0]) #4 print(arr_slice[1]) # 12 arr_slice[0:2]=89 print(arr_slice) #[89 89 12 12] print(arr) #[ 0 1 2 3 89 89 12 12 8 9] #如果你想要得到的是ndarray切片的一份副本而不是檢視,就需要進行復制操作,比如 arrCopy=arr.copy() print(arrCopy)
當然,針對多元的資料更加需要多元的陣列,比如二維陣列,這裡針對二維陣列切片和索引進行簡單的講解:
#如果是多維陣列,比如一個二維陣列,我們操作可以如下,先生成一個2維陣列:[[0 1 2][3 4 5][6 7 8]] x=[] for i in range(3): x1=np.arange(3*i,3*i+3) x.append(x1) arr2d=np.array(x) print(arr2d) #我們可以看看這個二維陣列如何切片,有關切片索引 print(arr2d[1]) # [3 4 5] # 二維陣列切片索引和一維稍微不同,以下兩個兩兩等價 print(arr2d[0:2]) # [[0 1 2][3 4 5]] print(arr2d[:2]) # [[0 1 2][3 4 5]] print(arr2d[2][0]) # 6 print(arr2d[2,:1]) #[6] print(arr2d[2,:2]) #[6 7] #更多維陣列操作也類似上面一樣,舉一反三
更多維度的陣列操作也類似上面,我們可以舉一反三,除了這一部分之外,還有布林索引和花式索引
花式索引:花式索引是一個numpy術語,它指利用整數陣列進行索引,例如,我們使用一個8*4的陣列
#有關花式索引 #花式索引是一個numpy術語,它指利用整數陣列進行索引,例如,我們使用一個8*4的陣列 # arr=np.empty((8,4)) arr=np.arange(32).reshape((8,4)) print(arr) #以特定順序選取子集,這裡選取的就是第5,4,1,7行的子陣列 print(arr[[4,3,0,6]]) #如果我們使用負數索引,則選取的從末尾開始-1為最後一行,-2為倒數第二行 print(arr[[-1,-2]]) #這裡輸出的分別是arr第5行的第一個數,第4行的第2個數,第1行的第3個數和第7行的第4個數組成的陣列 print(arr[[4,3,0,6],[0,1,2,3]]) #這裡輸出分別為arr第5,4,1,7行的第1,2,3個數組成的陣列 #[[16 17 18] [12 13 14] [ 0 1 2] [24 25 26]] print(arr[[4,3,0,6]][:,[0,1,2]])