python中符合序列的有序序列都支持切片,比如列表、字符串、元组
主要介绍列表和元组
1.列表切片
格式: 【start: end: step】
start:开始索引;end:结束索引;step:步长(步长为正时,从左到右索引,正序取值;步长为负时,从右到左索引,倒序取值)
特别注意end表示的索引为开区间,不会取到该序号对应的值
1.1 正序索引:步长step>0,索引的时候从左往右数
a = [1,2,3,4,5,6]
a[:3:1] #默认索引start从0开始,[0,3)左闭右开
>>>[1,2,3]
a[:3] #默认步长为 1
>>>[1,2,3]
a[-4:-2:1] # 出现负号,末尾序号为-1,[-4, -2)就是3和4
>>>[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开始,[-1, -4),一共三个数
a[3:0:-1]
>>>[4,3,2] #倒序索引
a[-2:2:-1]
>>>[5,4]
2.数组切片(对于大列表,可以使用numpy.array(list)转换为数组)
2.1二维数组 x[行, 列]
对于X[:,0] ,取二维数组中第一列所有行的数据
对于X[:,1] ,取二维数组中第二列所有行的数据
对于X[0,:],取二维数组中第一行所有列的数据
对于X[1,:],取二维数组中第二行所有列的数据
对于X[:,m:n] ,取二维数组中第m列到第n-1列所有行的数据
对于X[m:n,:],取二维数组中第m行到第n-1行所有列的数据
2.3三维数组X[页数, 行, 列]
X[:,:,0]、X[:,:,1]一般用在三维数组
大家可以把三维数组想象成一本书,第一维是每一页,行和列是每一页的行和列
X[0, 0, 0] 表示第一页第一行第一列的数据
X[:, 0, 0] 表示所有页第一行第一列的数据
X[0] 选取第一页的所有数据
X[:,:,0], 表示所有页的第一列的所有行数据
X[:,:,1], 表示所有页的第二列的所有行数据
X[:,:,m:n], 表示第m列到第n-1列的所有页数中所有行的数据
X[:,m:,n:], 表示所有页第m行和第n列之后的数据
X[:,m:,n:y], 表示所有页第m行之后,从第n列到第y-1行的数据
最后加粗的部分大家可以自行验证一下,比较不好理解,切片很灵活,我也只能列举出一些,遇到不会的使用交互式命令敲一敲代码,亲自跑跑,应该差不多知道了。
下面是一个现成的三维数组:
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]]])
我使用array数组进行讲解,mat矩阵同样适合;
注意一点,在array数组中,可以使用array[1, 2],也可以使用array[1][2],但是在mat矩阵中,只可以使用mat[1, 2],如果使用[1][2]是会报错的