列表、陣列切片X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]
阿新 • • 發佈:2019-01-10
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] 。