numpy——高级索引

numpy高级索引:

NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引

1 整数索引

除了支持python中list那样索引之外,还支持以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素

import numpy as np 
 
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
y = x[[0,1,2],  [0,1,0]]  # 指获取索引(0,0),(1,1),(2,0)
print (y)


# [1  4  5]

同时 切片操作支持多维数组:

import numpy as np



x = np.arange(100).reshape(4,25)
print(x)
print(‘------------------------------‘)
print(x[0:10:2])

结果:

[[ 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
  49]
 [50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
  74]
 [75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
  99]]
------------------------------
[[ 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]
 [50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
  74]]

2  布尔索引

我们可以通过一个布尔数组来索引目标数组。

布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组

import numpy as np



x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print(x>3)
print(x[x>3])
print(np.where(x>3))

结果:

[[False False False]
 [False  True  True]
 [ True  True  True]
 [ True  True  True]]
[ 4  5  6  7  8  9 10 11]
(array([1, 1, 2, 2, 2, 3, 3, 3], dtype=int64), array([1, 2, 0, 1, 2, 0, 1, 2], dtype=int64))
import numpy as np 
 
a = np.array([1,  2+6j,  5,  3.5+5j])  
print (a[np.iscomplex(a)])

结果:

   

[2.0+6.j  3.5+5.j]

3  花式索引

  花式索引根据索引数组的值作为目标数组的某个轴的下标来取值

  传入多个索引数组(要使用np.ix_)

import numpy as np 
 
x=np.arange(32).reshape((8,4))
print (x[np.ix_([1,5,7,2],[0,3,1,2])])
[[ 4  7  5  6]
 [20 23 21 22]
 [28 31 29 30]
 [ 8 11  9 10]]