布尔型索引的基本使用
布尔型索引指的是将一个布尔数组作为数组索引,返回的数据是布尔数组中True对应位置的值。
假设现在有一组存储了学生姓名的数组,以及一组存储了学生各科成绩的数组,存储学生成绩的数组中,每一行成绩对应的是一个学生的成绩。如果我们想筛选某个学生对应的成绩,可以通过比较运算符,先产生一个布尔型数组,然后利用布尔型数组作为索引,返回布尔值True对应位置的数据。示例代码如下:
In [72]: # 存储学生姓名的数组
student_name = np.array(['Tom', 'Lily', 'Jack', 'Rose'])
In [73]: student_name
Out[73]: array(['Tom', 'Lily', 'Jack', 'Rose'], dtype='<U4')
In [74]: # 存储学生成绩的数组
student_score = np.array([[79, 88, 80], [89, 90, 92],
[83, 78, 85], [78, 76, 80]])
In [75]: student_score
Out[75]:
array([[79, 88, 80],
[89, 90, 92],
[83, 78, 85],
[78, 76, 80]])
In [76]: # 对student_name和字符串“Jack”通过运算符产生一个布尔型数组
student_name == 'Jack'
Out[76]: array([False, False, True, False])
In [77]: # 将布尔数组作为索引应用于存储成绩的数组student_score,
# 返回的数据是True值对应的行
student_score[student_name=='Jack']
Out[77]: array([[83, 78, 85]])
布尔索引的相关示意图如图1所示。
图1 布尔索引图示
需要注意的是,布尔型数组的长度必须和被索引的轴长度一致。
此外,我们还可以将布尔型数组跟切片混合使用,示例代码如下:
In [78]: student_score[student_name=='Jack', :1]
Out[78]: array([[83]])
值得一提的是,使用布尔型索引获取值的时候,除了可以使用“==”运算符,还可以使用诸如“!=”、“-”来进行否定,也可以使用“&”、“|”等符号来组合多个布尔条件。