numpy 的条件筛选
筛选基础
数组切片
我们一般都知道 python 的 [ ] 操作符可以进行切片操作,举例如下:
1 2 3 4 5 6 7 8 9 10 11
| arr = [1,2,3]
arr[0:2]
arr[0:2:2]
arr[::-1]
|
下面是 ndarray 二维数组的例子
单列/行筛选
1 2 3 4 5 6 7 8 9 10 11 12 13
| arr = [ [1,2,3,4], [4,5,6,7] ] arr = np.array(arr)
arr[:,0]
arr[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
| arr = [ [1,2,3,4], [4,5,6,7] ] arr = np.array(arr)
arr[:,0:2]
arr[:,[0,3]]
arr[:,[True,False,False,False]]
arr = np.array([ [1,2,3,4], [4,5,6,7], [8,9,10,11] ]) arr[[0,1]]
|
条件筛选
通过上面的一些基本的筛选规则,可以大致了解了 numpy 的筛选原则了,那么下面就看一 numpy 比较强大的条件筛选吧。而条件筛选就是依赖 bool 筛选实现的。
条件筛选行
1 2 3 4 5 6 7 8 9 10
| arr = np.array([ [1,2,3,4], [4,5,6,7], [8,9,10,11] ])
arr[arr[:,0]%2==0]
|
我们可以看一下上面发生了什么。
首先: arr[:,0]x 选择除了二维数组的第一列—–[1,4,8]
然后: arr[:,0]%2==0 得到了一个 bool 数组—–[False,True,True]
最后 arr[[False,True,True]],这个样子是不是有点熟悉了,也就是上面的 bool 筛选。
条件筛选列
行列一起选择
注意:在进行行列一起选择时,可能会有元素类型不一致的情况,如第一列 int,第二列是 str,这样再用 arr>5 就会出现错误。
多条件选择
1 2
| arr[(arr>5) & (arr%2==0)]
|
注意:多条件要用()括起每一个条件,逻辑关系用 | 或者 &,不能用 and,or 这样。
v1.5.2