Jealh's Blog

𝓣𝓱𝓲𝓼 𝓲𝓼 𝓪 𝓫𝓮𝓪𝓾𝓽𝓲𝓯𝓾𝓵 𝓼𝓾𝓫𝓽𝓲𝓽𝓵𝓮

0%

numpy条件选择

numpy 的条件筛选

筛选基础

数组切片

我们一般都知道 python 的 [ ] 操作符可以进行切片操作,举例如下:

1
2
3
4
5
6
7
8
9
10
11
arr = [1,2,3]
#切片操作参数介绍:[起始位置下标(默认最开始):结束位置下标(默认最后):步长(默认为一)]
arr[0:2]
# [1,2]

arr[0:2:2]
# [1,3]

# 当步长为-1时,能够逆置数组
arr[::-1]
# [3,2,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] # 选择下标为0的列
# [1,4]

# 单行筛选
arr[0] # 选择下标为0的行,就像普通的二维数组访问第一个一维数组一样
# [1,2,3,4]
多行/列筛选
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]
# [
# [1,2],
# [4,5]
# ]
# 选择某些列
arr[:,[0,3]] # 选择下标为 0,3的列
# [
# [1,4],
# [4,7]
# ]
# bool选择
# bool数组的 长度 必须要与列的 维数相同
arr[:,[True,False,False,False]]
# [
# [1],
# [4]
# ]

# 多行筛选
# 与多列筛选类似
arr = np.array([
[1,2,3,4],
[4,5,6,7],
[8,9,10,11]
])
# 选择某些行
arr[[0,1]]
# [[
# [1,2,3,4],
# [4,5,6,7]
# ]]
# 其余就不在赘述,可以字行测试

条件筛选

通过上面的一些基本的筛选规则,可以大致了解了 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]
# [[ 4, 5, 6, 7],
# [ 8, 9, 10, 11]]

我们可以看一下上面发生了什么。
首先: arr[:,0]x 选择除了二维数组的第一列—–[1,4,8]
然后: arr[:,0]%2==0 得到了一个 bool 数组—–[False,True,True]
最后 arr[[False,True,True]],这个样子是不是有点熟悉了,也就是上面的 bool 筛选。

条件筛选列

1
2
3
4
5
# 与行筛选类似
arr[:,arr[1]>5] # 选择第二行中大于5的列
# [[ 3, 4],
# [ 6, 7],
# [10, 11]]

行列一起选择

1
2
3
4
5
6
7
arr[arr>5] # 选择arr中,大于5的元素
# 其中arr>5得到一个二维的bool数组
# [[False, False, False, False],
# [False, False, True, True],
# [ True, True, True, True]]
# 最终结果是一个一维数组
# [ 6, 7, 8, 9, 10, 11]
注意:在进行行列一起选择时,可能会有元素类型不一致的情况,如第一列 int,第二列是 str,这样再用 arr>5 就会出现错误。

多条件选择

1
2
arr[(arr>5) & (arr%2==0)] # 选择大于5且为偶数的元素
# [ 6, 8, 10]
注意:多条件要用()括起每一个条件,逻辑关系用 | 或者 &,不能用 and,or 这样。
-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道

Powered By Valine
v1.5.2