说我有以下数组:
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
函数可以一步完成?
答案 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])