根据条件过滤二维NumPy数组主要通过布尔索引实现。布尔索引可以将一个数组中符合特定条件的元素挑选出来,并返回一个布尔型数组,然后通过该布尔型数组作为索引来取出符合条件的元素。下面是详细的步骤:
1.创建一个二维NumPy数组。
import numpy as np
arr = np.array([[1, 3, 5], [2, 4, 6], [3, 5, 7], [4, 6, 8]])
print(arr)
输出:
array([[1, 3, 5],
[2, 4, 6],
[3, 5, 7],
[4, 6, 8]])
2.根据条件生成布尔型数组。
filter_arr = arr > 4
print(filter_arr)
输出:
array([[False, False, True],
[False, False, True],
[False, True, True],
[False, True, True]])
3.根据布尔型数组作为索引,选取符合条件的元素。
new_arr = arr[filter_arr]
print(new_arr)
输出:
array([5, 6, 5, 7, 6, 8])
此时得到的new_arr
为一维数组,如果想要得到符合条件的二维数组,则需要将布尔型数组作为索引传递给原数组的两个维度。
new_arr = arr[filter_arr.any(axis=1), :]
print(new_arr)
其中,filter_arr.any(axis=1)
代表选取行的方向上存在True
的元素,:
则代表选取所有列。
输出:
array([[1, 3, 5],
[2, 4, 6],
[3, 5, 7],
[4, 6, 8]])
以上便是根据条件过滤二维NumPy数组的基本步骤。
示例一:
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
bool_arr = arr > 5
result = arr[bool_arr.any(axis=1), :]
print(result)
输出:
array([[4, 5, 6],
[7, 8, 9]])
该示例中,通过布尔索引选取了数组中大于5的行并返回。
示例二:
arr = np.arange(20).reshape(5, 4)
bool_arr = (arr > 5) & (arr < 15)
result = arr[bool_arr]
print(result)
输出:
array([ 6, 7, 8, 9, 10, 11, 12, 13, 14])
该示例中,通过布尔索引选取了数组中大于5且小于15的元素并返回。注意,需要使用&
符号将两个条件合并。