布尔数组作为掩码

已完成

在上一节中,我们了解了直接在布尔数组上计算的聚合。 更强大的模式是使用布尔数组作为掩码来选择数据本身的特定子集。 返回到前面的 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 节中主要关注这些问题。