切片
切片语法格式:[start: end: step]
切片操作,适用于numpy数组,列表,元组,字符串
1. index
见上图,索引的形式有两种,正向索引和负向索引。
正向索引:方向是从左到右,从下表0开始。
负向索引:方向是从右到左,从下表-1开始
step:当step>0时,从左到右,当step<0时,从右到左
2. 一维数组(冒号)
一维数组通过冒号分割数组,有以下三种情形:
情形一: a[i] 返回与该索引相对应的单个元素。
a = [1,2,3,4,5,6,7,8,9]
print(a[2]) #3
情形二: [start: end: step](含start,不含end)
- step方向与索引方向要一致,否则会输出[]
- 当start缺省,表示取到端点位置,具体是“起始端点”还是“结束端点”要看step的值,当为正时,表示左边为起始端点,从左向右取;当为负数时,表示右边为起始端点,从右向左取。
- 当end缺省时,表示取到“终点”,具体终点是在左边还是右边,要看step的值是正数还是负数。step>0,终点是右,step<0,终点是左
- 决定切片方向是step的正负,无关索引正负
- start>0, end>0
a[1:6] #[2, 3, 4, 5, 6]
a[1:6:-1] #[] step方向与索引方向不一致
a[:6:-1] #[9,8] step=-1,决定从右到左的输出方向,start缺省,则默认为-1
a[6::-1] #[7, 6, 5, 4, 3, 2, 1]
- start>0, end<0
a[1:-6] #[2, 3]
a[1:-6:-1] #[] step方向与索引方向不一致
a[3:-8:-1] #[4, 3]
a[3:-9] #[] step方向与索引方向不一致
- start<0, end>0
a[-1:2:-1] #[9, 8, 7, 6, 5, 4]
- start<0, end<0
a[-6::-1] #[4, 3, 2, 1] end=0
a[:-6] #[1, 2, 3]
3. 二维数组/多维数组(逗号)
多维数组的切片,用逗号分隔每一维度。
import numpy as np
arr = np.arange(12).reshape(3,4)
print(arr[:,0]) #[0,4,8]
print(arr[:,:1]) #[[0],[4],[8]]
参考链接: link.
第一个是,指定了最后一列,也就是说,在二维数组里的一列,就是一维的啊。那么第二个,是从最后一列开始,不妨假设一下后面还有列,那么就应该是不止一列,对机器来说,就是二维的。机器肯定不知道什么时候是一维,什么时候是二维的,所以当你用到start和end的时候,那就当作是二维的了。