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