Numpy Indexing

作者 Mingjiang Shi 日期 2019-06-02
Numpy Indexing

Numpy Indexing

从numpy的向量中取得需要的元素与从数组中取得元素类似,不过numpy提供了更高级的玩法,一起来看看。

一维向量

假设有向量a=[1,2,3,4],从a中取得部分元素的方法有:

  • 从中取出一个元素用a[i],i表示索引。
  • 从中连续的多个元素,比如取出前三个元素,则使用a[0:3],可以把0给省略掉a[:3]a[:-2]从中取出最后两个元素。
  • 从中取出多个不连续的元素,参数为一个list。比如a[[0,2]],表示取出第1和第3个元素。
  • 取出所有元素用a[:],这种表示方式在多维向量中很有用。

这里面的的规律则是:

  • a:b来表示一个范围,a为起点,b为终点(不包含在结果中),a如果不写的话则表示0,b不写的话表示最后一个元素。
  • [a,b,c]来获取多个不连续的元素。

多维向量

从多维向量中取出元素的方式与从一维向量中取出元素类似,只是需要指定各个维度元素的范围。

比如,a为二维向量,如下:

>>> a = np.array([[1,2,3],[4,5,6]])
array([[1, 2, 3],
[4, 5, 6])

看几个例子就明白是什么意思了。

  • a[:, -1]:第一维的范围是:,表示第一维所有元素都取出,第二维只去最后一个元素,因此结果是[3, 6]。注意:这里第二维是取最后一个元素,不是取出一个1维数组,因此降维了,结果就是个1维数组。
  • a[:, -1:],第一维依然是取出所有元素,第二维是最后一个元素,但是-1:是取出一个范围内的元素,只是这个范围只有1个元素,因此结果还是二维的,结果是[[3], [6]]
  • a[:, :2],第一维取出所有元素,第二维取出前两个元素,因此结果是个二维向量[[1, 2], [4, 5]]
  • a[[1], [1,2]], 第一维取出第2个元素,第二维取出第2和3个元素,因此结果是[5, 6]

简单来讲,只要依次分析各个维度上取哪些元素,然后组合起来即可。需要注意是每个维度上取出的单个元素还是一个范围。取出单个元素会降低维度。