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]]