过滤 NumPy 数组中的元素
通常,我们需要特定的数组值,通常是升序或降序。有时,我们还必须从数组中搜索元素,然后检索它们或根据某些条件过滤某些值。
本文将介绍如何从 NumPy 数组中过滤数值。
在 NumPy 中使用 fromiter()
方法过滤元素
fromiter()
从可迭代对象创建一个新的一维数组,该数组作为参数传递。我们可以将条件应用于输入数组元素,然后进一步将该函数赋予该新数组,以在 NumPy 数组中获取所需的元素。
fromiter()
方法的语法如下。
fromiter(iterable, dtype, count, like)
它具有以下参数。
iterable
- 函数将对其进行迭代的可迭代对象。dtype
- 此参数引用返回数组的数据类型。count
- 这是一个可选的整数参数,它表示将在可迭代对象中读取的元素数。此参数的默认值为-1
,表示将读取所有元素。like
- 这是一个可选的布尔参数。它控制返回数组的定义。
在 NumPy 中使用 fromiter()
方法过滤元素的方法如下。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray = np.fromiter(
(element for element in myArray if element < 6), dtype=myArray.dtype
)
print(myArray)
print(newArray)
输出:
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
首先,我们初始化一个 NumPy 数组,我们希望从该数组中过滤元素。然后,我们遍历整个数组并过滤出小于 6
的值。然后,我们将此新数组转换为与原始数组具有相同数据类型的 NumPy 数组。
要了解有关此方法的更多信息,请参考其官方文档
在 NumPy 中使用布尔掩码切分方法过滤元素
这种方法有点怪异,但在 NumPy 中却像是一种魅力。我们必须提到数组后方括号 []
内的条件。然后 NumPy 将根据条件过滤掉元素并返回一个新的过滤数组。
这个概念可能不清楚,甚至对于某些人来说似乎很棘手,但请不要担心。我们在下面有一些示例来对其进行更好的解释。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[myArray < 6] # Line 1
newArray2 = myArray[myArray % 2 == 0] # Line 2
newArray3 = myArray[myArray % 2 != 0] # Line 3
newArray4 = myArray[np.logical_and(myArray > 1, myArray < 5)] # Line 4
newArray5 = myArray[np.logical_or(myArray % 2 == 0, myArray < 5)] # Line 5
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)
输出:
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
[2 4 6 8]
[1 3 5 7 9]
[2 3 4]
[1 2 3 4 6 8]
如上所述,我们在方括号之间添加了一些条件,并根据这些条件对目标数组进行了过滤。存储数组的变量(在本例中为 myArray
)代表方括号内数组的单个元素。
为了应用多个条件并使用逻辑运算符,我们分别使用两种 NumPy 方法,分别对逻辑 and
或 or
使用 logical_and()
和 logical_or()
。
myArray < 6
- 过滤小于 6 的值myArray % 2 == 0
- 过滤可被 2 整除的值myArray % 2 != 0
- 过滤不能被 2 整除的值np.logical_and(myArray > 1, myArray < 5)
- 过滤大于 1 且小于 5 的值。np.logical_or(myArray % 2 == 0, myArray < 5)
- 过滤可被二整除或小于五的值。
在 NumPy 中使用 where()
方法过滤元素
这是最后一个方法,它使用 [NumPy 库中的 where()
方法)。它根据条件从目标数组中筛选元素,并返回已筛选元素的索引。
你也可以使用此方法来更改满足条件的元素的值。
where()
方法的语法如下所示。
where(condition, x, y)
它具有以下参数。
condition
- 这是布尔条件,要检查数组的每个元素。x
- 它是赋予满足条件的元素的值或满足条件的元素上进行的计算。y
- 它是赋予不满足条件的元素的值或对不满意元素进行的计算。
让我们看看如何使用此函数过滤掉元素。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[np.where(myArray < 7)[0]]
newArray2 = myArray[np.where(myArray % 2 == 0)[0]]
newArray3 = myArray[np.where(myArray % 2 != 0)[0]]
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
输出:
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6]
[2 4 6 8]
[1 3 5 7 9]
在以上代码段中,所有满足条件的元素都以数组形式返回。
where()
函数返回 NumPy 数组的元组。因此,我们只考虑第一个数组,这就是我们的答案。
如上所述,你还可以分配自定义值,并在元素满足指定条件时和不满足条件时对元素执行自定义操作。
下面是一个例子。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = np.where(myArray < 7, 5, -1)
newArray2 = np.where(myArray % 2 == 0, myArray ** 2, 0)
newArray3 = np.where(myArray % 2 != 0, myArray, -1)
newArray4 = np.where(myArray % 2 != 0, myArray, myArray)
newArray5 = np.where(myArray % 2 != 0, 0, myArray)
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)
输出:
[1 2 3 4 5 6 7 8 9]
[ 5 5 5 5 5 5 -1 -1 -1]
[ 0 4 0 16 0 36 0 64 0]
[ 1 -1 3 -1 5 -1 7 -1 9]
[1 2 3 4 5 6 7 8 9]
[0 2 0 4 0 6 0 8 0]
看一下输出。查看元素如何根据条件以及根据你提供的用于操纵 where()
函数的元素提供的值和计算而变化。