1. 程式人生 > >列表、陣列切片X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]

列表、陣列切片X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]

python中對於列表和陣列進行切片是很頻繁的

1.列表切片

python中符合序列的有序序列都支援切片,例如列表、字串、元祖

格式:【start:end:step】

start:開始索引;end:結束索引;step:步長(步長為正時,從左到右索引,正序取值;步長為負時,從右到左索引,倒序取值)

1.1 正序索引:步長step>0,索引的時候從左往右數,

a = [1,2,3,4,5,6]

a[:3:1]   #預設索引start從 1 開始
>>>[1,2,3]

a[:3]    #預設步長為 1 
>>>[1,2,3]

a[-4:-2:1]
>>>[3,4]

a[-4:4:1]
>>>[3, 4]

1.2 倒序索引:步長step<0,索引的時候從右往左數,

a = [1,2,3,4,5,6]

a[:-4:-1]
>>>[6, 5, 4]  #預設從 -1 開始

a[3:0:-1]
>>>[4,3,2]   #倒序索引


a[-2:2:-1]
>>>[5,4]

2.陣列切片(陣列形式,若是一個大列表,可以np.array(list)轉成陣列)

2.1 二維陣列,X【行,列】 

對於X[:,0] ,取二維陣列中第一列所有行的資料

對於X[1,:],取二維陣列中第二行所有列的資料

對於X[:,m:n] ,取二維陣列中第m列到第n-1列所有行

的資料

對於X[m:n,:],取二維陣列中第m行到第n-1行所有列的資料

2.2 三維陣列,X【樓層,行,列】

建立一個三維陣列:

a = np.arange(24).reshape(2,3,4)
print(a)

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

我們可以形象的把它看成一個兩層樓的建築,每層樓有12個房間,並排列成3行4列。

(1)可以用三維座標來選定任意一個房間,即樓層、行號、列號。例如,選定第一層樓、第一行、第一列的房間,如下:

a[0,0,0]
>>>0

(2)選取所有樓層、第一行、第一列的房間 ,如下:

a[:,0,0]
>>>array([ 0, 12])

(3)選取第一層樓所有的房間,如下:

a[0]
>>>array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

對於X[:,:,0],取三維陣列中第1列的所有樓層,所有行的資料

對於X[:,:,m:n],取三維陣列中第m列到第n-1列的所有樓層,所有行的資料 

a[:,:,2:4]
>>>array([[[ 2,  3],
        [ 6,  7],
        [10, 11]],

       [[14, 15],
        [18, 19],
        [22, 23]]])

注:以上陣列形式的切片方法,在矩陣中同樣適用。但是,若要取某個準確的值時,比如說第一列,第二行這一準確值時,矩陣的話,最好用mat[1,2],而陣列的話,既可以用array[1,2],也可以用array[1][2] 。