numpy的索引和切片的简单操作

numpy 的索引和切片操作。
是numpy 模块当中的重点内容。
索引和切片可以取得数组或者列表这些容器当中任意的数据。
numpy 模块当中索引和切片更加的灵活。
numpy 索引操作和列表的索引操作是一样的。
那么接下来就进行索引和切片的演示操作

首先先创建一个提供切片和索引的数组这里我们使用random.randint 来创建。
arr = np.random.randint(1,100,size=(5,6))
arr
low=1 high=100 size 5 行 6 列的数组
打印出来
numpy的索引和切片的简单操作_第1张图片

取下标为1 的一行( 0,1,2,3,4 共5行)
arr[1]
array([10, 34, 31, 53, 46, 80])
numpy的索引和切片的简单操作_第2张图片

取下标为1,3,4 的多行
arr[[1,3,4]]
array([[10, 34, 31, 53, 46, 80],
[93, 51, 52, 41, 90, 31],
[63, 94, 14, 50, 45, 1]])
numpy的索引和切片的简单操作_第3张图片

那么这样的行为就是numpy 数组的索引操作。

那么接下来讲解numpy 的切片
arr[0:2]
array([[70, 49, 26, 52, 66, 19],
[10, 34, 31, 53, 46, 80]])
这个操作就切出了numpy 数组的前俩行
numpy的索引和切片的简单操作_第4张图片

那么怎么切出numpy 数组的前俩列呢?
arr[:,0:2]
array([[70, 49],
[10, 34],
[55, 22],
[93, 51],
[63, 94]])
numpy的索引和切片的简单操作_第5张图片

我们可以发现
arr[行,列]
行列的格式x:y
所以就是[x:y,x:y]

那么验证一下我们得出的结论是否正确
用arr切出前俩行前俩列
arr[0:2,0:2]
array([[70, 49],
[10, 34]])
numpy的索引和切片的简单操作_第6张图片

那么切片学会了我们怎么将数据进行一些翻转操作呢?
那么先解释一下翻转的意思,就是将原有的数组元素倒序表达

我们先来学习行的倒序
原始
array([[70, 49, 26, 52, 66, 19],
[10, 34, 31, 53, 46, 80],
[55, 22, 86, 90, 24, 61],
[93, 51, 52, 41, 90, 31],
[63, 94, 14, 50, 45, 1]])
使用arr[::-1]倒序后
array([[63, 94, 14, 50, 45, 1],
[93, 51, 52, 41, 90, 31],
[55, 22, 86, 90, 24, 61],
[10, 34, 31, 53, 46, 80],
[70, 49, 26, 52, 66, 19]])
发现行的位置进行了上下的翻转。
numpy的索引和切片的简单操作_第7张图片

那么怎么将数组的列倒置呢?
可以通过arr[:,::-1]
行不倒置列倒置
array([[19, 66, 52, 26, 49, 70],
[80, 46, 53, 31, 34, 10],
[61, 24, 90, 86, 22, 55],
[31, 90, 41, 52, 51, 93],
[ 1, 45, 50, 14, 94, 63]])
对比原始数组
array([[70, 49, 26, 52, 66, 19],
[10, 34, 31, 53, 46, 80],
[55, 22, 86, 90, 24, 61],
[93, 51, 52, 41, 90, 31],
[63, 94, 14, 50, 45, 1]])
numpy的索引和切片的简单操作_第8张图片

那么将所有元素倒置就是
arr[::-1,::-1]
array([[ 1, 45, 50, 14, 94, 63],
[31, 90, 41, 52, 51, 93],
[61, 24, 90, 86, 22, 55],
[80, 46, 53, 31, 34, 10],
[19, 66, 52, 26, 49, 70]])
所以 ::-1 就是倒置的操作。
numpy的索引和切片的简单操作_第9张图片

那么我们可不可以将这些操作应用到图片的处理上呢?
比如将图片进行左右翻转。
行倒置是将图片上下翻转 列倒置是将图片左右翻转

img_arr.shape
输入该命令查看该图片的原始形状
(900, 1440, 3)
这个表示的是 900 是行 1440 是列 3 是颜色
numpy的索引和切片的简单操作_第10张图片

plt.imshow(img_arr[:,::-1,:])
行和颜色均不做处理,将列倒置。
numpy的索引和切片的简单操作_第11张图片

同样的图片上下翻转的话对行进行倒置就可以了。
plt.imshow(img_arr[::-1,:,:])
numpy的索引和切片的简单操作_第12张图片

那么我们不可以使用对数组的切片来实现对图片的裁剪呢?
我们来看一下怎么做。
那么我们来切一个人物的上半部分看看
行坐标选择210-620
纵坐标 1000-1380
图片颜色不变
plt.imshow(img_arr[300:600,0:400,:])
numpy的索引和切片的简单操作_第13张图片
这样这个卡通的人物头像就切出来了。

你可能感兴趣的:(数据分析,numpy,索引)