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



免責聲明!

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



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