1. 程式人生 > >python基礎---有關nparray----切片和索引(一)

python基礎---有關nparray----切片和索引(一)

    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]])