从numpy数组中提取满足条件的值

时间:2019-01-08 11:01:47

标签: python numpy

说我有以下数组:

a = np.array([1,1,1,2,2,2])
b = np.array([4,6,1,8,2,1])

是否可以执行以下操作:

a[np.where(b>3)[0]]
#array([1, 1, 2])

因此根据a中满足条件的索引从b中选择值,但仅使用np.where或类似的numpy函数吗?

换句话说,当条件为np.where时,可以使用True仅指定要从中获取值的数组吗?还是有另一个numpy函数可以一步完成?

3 个答案:

答案 0 :(得分:2)

是的,有一个函数:numpy.extract(condition, array)返回array中满足条件的所有值。

np.where或布尔索引相比,使用此功能并没有太多好处。所有这些方法都会创建一个临时布尔数组,用于存储b>3的结果。 np.where创建附加索引数组,而a[b>3]np.extract直接使用布尔数组。

我个人会使用a[b>3],因为这是最有趣的形式。

答案 1 :(得分:1)

只需使用布尔索引。

>>> a = np.array([1,1,1,2,2,2])                                                                                                   
>>> b = np.array([4,6,1,8,2,1])                                                                                                   
>>>                                                                                                                               
>>> a[b > 3]                                                                                                                      
array([1, 1, 2])

b > 3将为您提供array([True, True, False, True, False, False]),并用a[b > 3]a中选择索引数组为True的所有元素。

答案 2 :(得分:0)

让我们使用列表理解来解决这个问题-

a = np.array([1,1,1,2,2,2])
b = np.array([4,6,1,8,2,1])
indices = [i for i in range(len(b)) if b[i]>3]  # Returns indexes of b where b > 3 - [0, 1, 3]
a[indices]
    array([1, 1, 2])
相关问题