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)>>> ar1array([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]])>>> ar2darray([[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交集的元素,如下图