基本的分片和索引操作
-
多维数组的分片操作:
>>> a = np.arange(27).reshape(3,3,3) >>> a array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]]])
对三维数组,就要在三个维度上去运用切片
>>> a[:,0,1] array([ 1, 10, 19])
: 代表第一个维度,全部都遍历。0表示第二个维度取第一个,即:[0,1,2],[9,10,11],[18,19,20],1表示第三个维度的第二个数字,就可以得到[1,10,19]
如果想取到1,4,7怎么办?
首先第一个维度先取第一个,即0,第二个维度是全部取的,因为每个都要。第三个维度取第二个数,即1。故:
>>> a[0,:,1] array([1, 4, 7])
除此之外,依旧可以取负值切片,如取7,4,1
>>> a[0,::-1,1] array([7, 4, 1])
高级索引
当方括号内的索引方式不再是之前介绍的简单序列的时候,就会触发高级索引。高级索引包括整数索引和布尔索引。
-
整数索引
对于一维数组而言,使用数组进行索引,返回的结果和索引数组的形状一样,不同的地方在于被索引数组的相关值会替代索引数组对应位置的值。
>>> test = np.arange(10) >>> test[np.array([[1,2],[3,4]])] array([[1, 2], [3, 4]])
由于1,2,3,4位置上的数字恰好是1,2,3,4。所以返回如上结果。
再看另一组例子,依旧用之前生成好的a:
>>> a array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12