首页 > 编程笔记

Numpy数组索引

数组的索引主要用来获得数组中的数据。在 Numpy 中数组的索引可以分为两大类:一是一维数组的索引;二是二维数组的索引。一维数组的索引和列表的索引几乎是相同的,二维数组的索引则有很大不同。

1. 一维数组索引操作

一维数组的索引和 Python 中 list 结构索引十分相似,需要注意在切片索引的时候末尾的下标是取不到的。示例代码如下。
In [1]: import numpy as np
In [2]: a = np.array([1,2,3,4,5,6])
In [3]: a[0]  # 下标为0的元素
Out[3]: 1
In [4]: a[-1]  # 下标为-1的元素
Out[4]: 6
In [5]: a[1:3]  # 下标从1到3的切片,不包含3
Out[5]: array([2, 3])
In [6]: a[2:]  # 下标从2到末端的切片
Out[6]: array([3, 4, 5, 6])
In [7]: a[1:5:2]  # 下标从1到5的切片,不包含5,且步长为2
Out[7]: array([2, 4])

2. 二维数组索引操作

二维数组的索引格式是中括号中逗号前选择行,逗号后选择列。而在选择行和列的时候可以传入列表,或者使用冒号来进行切片索引。示例代码如下。
In [1]: import numpy as np
In [2]: a = np.array([[1,2,3,4],
   ...:               [5,6,7,8],
   ...:               [9,10,11,12],
   ...:               [13,14,15,16]])
首先我们可以使用数组的 shape 属性来查看该数组的形状,可以看到该数组的形状是 4 行和 4 列。
In [3]: a.shape
Out[3]: (4, 4) 
在二维数组的索引中,冒号指的是切片,a[1:3] 的意思是按行索引,选取下标为 1、下标为 2 的所有行的元素。
In [4]: a[1:3]  # 按列索引,选取下标为1、下标为2的所有行的元素
Out[4]: 
array([[ 5,  6,  7,  8],
       [ 9, 10, 11, 12]]) 
在二维数组的索引中,不仅可以按行索引,还可以按列索引,而且还可以按行按列同时索引。比如 a[1:3,0:2] 所表达的意思就是,选取行标为 1∶3、列标为 1∶2 的所有元素。
In [5]: a[1:3,0:2]  # 选取行表为1∶3、列标为1∶2的所有元素
Out[5]: 
array([[ 5,  6],
       [ 9, 10]]) 
切片的本质是传入一个连续的列表,所以我们还可以传入列表来获得相应位置的元素。比如 a[[0,2],[1,2]] 的含义是选取 0 行、2 行、1 列、2 列对应的元素。
In [6]: a[[0,2],[1,2]]  # 选取0行、2行、1列、2列对应的元素
Out[6]: array([ 2, 11]) 

优秀文章