布尔数组作为掩码
在上一节中,我们了解了直接在布尔数组上计算的聚合。 更强大的模式是使用布尔数组作为掩码来选择数据本身的特定子集。 返回到前面的 two_dim_array 数组,假设我们需要一个数组,其中的所有值都小于 5:
two_dim_array
输出为:
array([[5, 0, 3, 3],
[7, 9, 3, 5],
[2, 4, 7, 6]])
可以轻松获取符合此条件的布尔数组:
two_dim_array < 5
输出为:
array([[False, True, True, True],
[False, False, True, False],
[ True, True, False, False]])
现在,若要从数组中选择这些值,只需对此布尔数组编制索引。 这是掩码操作:
two_dim_array[two_dim_array < 5]
输出为:
array([0, 3, 3, 3, 2, 4])
返回的内容是一维数组,其中填充了满足条件的所有值。 换句话说,它们是掩码数组为 True 的位置的所有值。
可以使用掩码来计算有关西雅图降雨数据的一些相关统计信息:
# Construct a mask of all rainy months
rainy = (rainfall_2003 > 0)
# Construct a mask of all summer months (June through September)
months = np.arange(1, 13)
summer = (months > 5) & (months < 10)
print("Median precip in rainy months in 2003 (inches): ",
np.median(rainfall_2003[rainy]))
print("Median precip in summer months in 2003 (inches): ",
np.median(rainfall_2003[summer]))
print("Maximum precip in summer months in 2003 (inches): ",
np.max(rainfall_2003[summer]))
print("Median precip in non-summer rainy months (inches):",
np.median(rainfall_2003[rainy & ~summer]))
输出为:
Median precip in rainy months in 2003 (inches): 1.94
Median precip in summer months in 2003 (inches): 0.41000000000000003
Maximum precip in summer months in 2003 (inches): 0.97
Median precip in non-summer rainy months (inches): 2.865
要点
通过组合布尔运算、掩码运算和聚合,你可快速回答有关任何数据集的,与我们提出的有关西雅图降雨量数据的问题类似的问题。 这些运算将成为数据浏览和分析准备的基础,我们将在第 4 节和第 5 节中主要关注这些问题。