📌  相关文章
📜  NumPy – 按多个条件过滤行(1)

📅  最后修改于: 2023-12-03 14:44:48.556000             🧑  作者: Mango

NumPy – 按多个条件过滤行

在NumPy中,有时候需要根据多个条件对数组中的行进行过滤,本文将介绍如何实现该功能。

按多个条件过滤行

NumPy中可以使用布尔操作符 &| 对多个条件组合进行判断。

考虑一个 $m \times n$ 的数组 arr,如果我们需要按照 arr[:, 0] >= 0.5arr[:, 1] < 0.7 这两个条件来过滤行,可以使用如下代码:

import numpy as np

arr = np.array([[0.8, 0.3, 0.6],
                [0.1, 0.4, 0.6],
                [0.6, 0.9, 0.2],
                [0.4, 0.2, 0.8]])

mask = (arr[:, 0] >= 0.5) & (arr[:, 1] < 0.7)

filtered_arr = arr[mask]

print(filtered_arr)

输出结果为:

[[0.8 0.3 0.6]
 [0.4 0.2 0.8]]

其中,我们定义了一个布尔类型的掩码数组 mask,用于表示哪些行应该被保留。在本例中,mask 为以下形式:

[ True  True False  True]

最后,我们将掩码数组 mask 应用到原始数组 arr 上,从而得到了过滤后的数组 filtered_arr

多个条件的组合

在实际应用中,我们可能需要使用多个不同的条件组合来过滤行。此时,我们可以采用如下方法:

import numpy as np

arr = np.array([[0.8, 0.3, 0.6],
                [0.1, 0.4, 0.6],
                [0.6, 0.9, 0.2],
                [0.4, 0.2, 0.8]])

mask = ((arr[:, 0] >= 0.5) & (arr[:, 1] < 0.7)) | ((arr[:, 0] < 0.2) & (arr[:, 2] >= 0.5))

filtered_arr = arr[mask]

print(filtered_arr)

在本例中,我们定义了两个不同的条件:arr[:, 0] >= 0.5arr[:, 1] < 0.7,以及 arr[:, 0] < 0.2arr[:, 2] >= 0.5。我们将这两个条件使用逻辑或 | 连接起来,得到如下形式的掩码数组 mask

[ True  True False  True]

需要注意的是,每个条件都应该用圆括号括起来,以确保正确的逻辑操作。

最后,我们将掩码数组 mask 应用到原始数组 arr 上,得到了过滤后的数组 filtered_arr

结论

本文介绍了如何在NumPy中按照多个条件对数组中的行进行过滤。通过使用逻辑与 & 和逻辑或 | 连接不同的条件,可以灵活地实现多条件的组合判断。

希望本文对大家有所帮助!