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]]) |
看几个例子就明白是什么意思了。
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]
。
简单来讲,只要依次分析各个维度上取哪些元素,然后组合起来即可。需要注意是每个维度上取出的单个元素还是一个范围。取出单个元素会降低维度。