1 numpy基础之切片索引
多维数组有多个轴,索引下标从0轴开始,每个轴下标用逗号分隔。
比如[m,n,o],表示0轴上索引为m,1轴上索引为n,2轴上索引为o的下标。
切片索引下标是在指定轴上用冒号选取一定范围的下标。
比如[m:n,i:j],表示0轴上索引从m到n(不包括n),1轴上索引从i到j(不包括j)的下标。
1.1 一维数组切片
一维数组的切片索引跟python列表类似。
>>> import numpy as np
>>> ar1=np.arange(10,20)
>>> ar1
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
# ar1[m:n]获取0轴上索引从m到n(不包括n)的元素
>>> ar1[5:8]
array([15, 16, 17])
1.2 二维数组切片
多维数组的切片索引是沿着指定轴选取元素。
1.2.1 单切片
[m:n]获取0轴上索引从m到n(不包括n)的元素
[:n]起始索引为空则默认从0开始
[m:]结束索引为空则默认到最后一个索引(长度减1)
[:]没有起始和结束索引则选取整个轴
>>> import numpy as np
# 创建一个二维数组
>>> ar2d=np.array([[10,11,12],[13,14,15],[17,18,19],[20,21,22]])
>>> ar2d
array([[10, 11, 12],
[13, 14, 15],
[17, 18, 19],
[20, 21, 22]])
# ar2d[m:n]获取0轴上索引从m到n(不包括n)的元素
# ar2d[1:3]获取0轴上1、2索引的元素,即中间2行的元素
>>> ar2d[1:3]
array([[13, 14, 15],
[17, 18, 19]])
# [:n]起始索引为空则默认从0开始
>>> ar2d[:3]
array([[10, 11, 12],
[13, 14, 15],
[17, 18, 19]])
# [m:]结束索引为空则默认到最后一个索引(长度减1)
>>> ar2d[1:]
array([[13, 14, 15],
[17, 18, 19],
[20, 21, 22]])
# [:]没有起始和结束索引则选取整个轴
>>> ar2d[:]
array([[10, 11, 12],
[13, 14, 15],
[17, 18, 19],
[20, 21, 22]])
1.2.2 多个切片
[m:n,i:j]多个切片,取多个轴交集的部分
[m:n,i]切片与整数混合
# [m:n,i:j]多个切片,取多个轴交集的部分
# ar2d[:2,1:]表示前2行的第2、3列元素
# shape为(2,2)
>>> ar2d[:2,1:]
array([[11, 12],
[14, 15]])
# [m:n,i]切片与整数混合
# ar2d[:2,2]表示前2行的第3列元素
>>> ar2d[:2,2]
array([12, 15])
# 冒号对高维轴切片
>>> ar2d[:,:1]
array([[10],
[13],
[17],
[20]])
1.2.3 索引切片图片
ar2d=np.array([[10,11,12],[13,14,15],[17,18,19],[20,21,22]])
ar2d[1:3] 切片取0轴的索引为1和2的元素【包头不包尾】,如下图
ar2d[:3] 切片取0轴的索引为0、1和2的元素【起始索引默认从0开始】,如下图
ar2d[1:] 切片取0轴的索引为1、2和3的元素【结束索引默认到最后】,如下图
ar2d[:] 切片取0轴的全部元素,如下图
ar2d[:2,1:] 切片取0轴索引为0、1与1轴索引为1、2交集的元素,如下图
ar2d[:,:1] 切片取0轴索引为0、1、2、3与1轴索引为0交集的元素,如下图