2.3 数组的索引与切片
2.3.1 数组的索引
- 一维数组的索引
一维数组的索引和列表的索引基本相同
比如,列表的索引是根据下标索引,
下标值为正的时候是从头开始数(下标从0开始)
下标值为负的时候就是从尾部往前数(从-1开始)
创建一个包含10个元素的一维数组,元素值为[0,10)的随机整数
取倒数第二个
- 多维数组的索引
回顾列表的索引
列表的索引:要查询内部的某个数据,首先要找最外层的索引,然后一层层的向内找
创建一个3x4的二维列表,
- ) 逐层查找
- ) 多层索引:一个[ ]中用,将多个层的索引隔开,查找的时候,根据每一层取定位,最直接把定位到的数据取出
先查找的是第0维度的第2个元素,然后再找第一维度下的第1个元素
- ) 多个索引:用一个列表来作为一个数组的索引,根据列表对应子元素取出,然后按照顺序放在一起
这个是找到第0维度下的元素,可重复索引元素
[拓展] 怎么索引多个第1维度下的元素呢?
怎么取到的?
先取到第0维度下的第一,二个元素,然后再取第一维度下的第二个元素,就是17,4
如果要取第一维度下的不同元素呢?
取到的就是这两个
2.3.2 数组的切片
首先这个是一个3x4的二维数组
对行进行切片(第0维度)
区间前闭后开,
再举个例子:取不到第二个元素,只取到前两个
- 按步长切片(联想列表)
步长为1
步长为2
步长为3
对列进行切片(第1维度)
从第1个元素(第二列)切到最后
从第2个元素切到第100个元素(这里最多就第3个),后面这个数字超过也不会报错,切到最后一个元素
既切行又切列
切的就是这个部分
还可以加上步长
这个取的就是这个部分
步长可以为1,也可以为-1,正好反过来取
拓展:对彩色图片进行切片
前面提到过,彩色图片是一个三维数组,第0个维度是高,第1个维度是高;
第2个维度是通道,所以切片不能对第2个维度切片,只能切第0,1维度
就是这张图片
j进行切片
这个位置,很唯美是吧
如果要将图片上下反转过来,将第0,1维度的步长取-1就行,这样就反过来取了
如果要左右翻转呢?,那么就第0维度不动,将第一维度步长设为-1就行
将图片弄扁,宽为原来的1/4,高为原来的1/2
宽的步长取4,高的步长取2就行了
练习
拼图(美女坐在老虎背上)
首先看一下这两张图片
所以,要在老虎的背上取出一块,将美女图片放在那一块上
首先确定老虎背上的区域位置和大小
然后将这一块赋值为0
如果赋值不了,在前面加上copy
为了图片好看一点,对上老虎的背,美女图片也裁剪一下,对应上老虎背上缺掉的那一块
最后将美女图片赋值给缺失的那一块,展示一下老虎图片