在给定一组条件的情况下,如何返回非平坦的numpy数组选择元素?

时间:2016-10-19 19:19:34

标签: python arrays numpy conditional slice

我有一个多维数组,比如形状(4,3),看起来像

a = np.array([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])

如果我有固定条件列表

conditions = [True, False, False, True]

如何返回列表

array([(1,2,3),(10,11,12)])

使用np.extract返回

>>> np.extract(conditions, a)
array([1, 4])

只返回每个嵌套数组的第一个元素,而不是数组本身。我不确定是否或如何使用np.where执行此操作。非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

让我们定义变量:

>>> import numpy as np
>>> a = np.array([(1,2,3),(4,5,6),(7,8,9),(10,11,12)])
>>> conditions = [True, False, False, True]

现在,让我们选择您想要的元素:

>>> a[np.array(conditions)]
array([[ 1,  2,  3],
       [10, 11, 12]])

除了

请注意,较简单的a[conditions]有一些歧义:

>>> a[conditions]
-c:1: FutureWarning: in the future, boolean array-likes will be handled as a boolean array index
array([[4, 5, 6],
       [1, 2, 3],
       [1, 2, 3],
       [4, 5, 6]])

正如您所看到的,conditions在这里被视为(整数)索引值,这不是我们想要的。

答案 1 :(得分:1)

你可以使用简单的列表切片和np.where它或多或少是专门针对这种情况制作的。

>>> a[np.where(conditions)]
array([[[ 1,  2,  3],
        [10, 11, 12]]])