如何根据条件过滤二维NumPy数组

  • Post category:Python

根据条件过滤二维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的元素并返回。注意,需要使用&符号将两个条件合并。