在python中,切片(slice)是对序列型对象(如list,string,tuple)的一种高级索引方法。普通索引只取出序列一个下标对应的元素,而切片取出序列中一个范围对应的元素,这里的范围不是狭义上的连续片段。通俗一点就是在一定范围内如同用刀切出一部分,达到自己需要的一部分。因为最近也在学pytorch,所以这里用torch中的张量举例。
一、切片的索引方式
正索引(按下标从0开始):
负索引(最后一个元素索引值为-1,从右往左后面递减):
二、索引的一般形式
一个完整的切片是包含三个参数和两个冒号(😃,即:
object[start_index:end_index:step]
start_index:切片的起始位置,如果没有值的话从头开始;
end_index:切片的结束位置,但不包含end(前闭后开),如果没有值的话表示切割到结束为止;
step:步长,默认值为1,如果步长为正数的情况下表示从左往右,若为负数表示从右往左。step的政府决定切的方向。
此外:当只有一个冒号(:)时,默认第三个参数step=1;当一个冒号(:)也没有时,start_index=end_index,表示切取start_index指定的那个元素。
三、切片操作的详细切法
1.切割完整的对象
单独一个冒号,代表从头切到尾,步长默认为1.
单独两个冒号一样代表从头切到尾,步长默认为1.
python数组中步长为-1时从右往左切,但pytorch中不能这样使用。
2.当start_index和end_index全部为正数时。
3.步长不为1或-1时
4.连续的切片操作
上面连续的切片[:7]就是start_index=0切到end_index=7即torch([1,2,3,4,5,6,7]),再从中取start_index=2到end_index=5-1的部分即torch([3,4,5]),最后取index=-1的位置即torch(5)。
四、多维张量的切片
对于多维张量的切片类似,对每一维的切片用逗号隔开。