首页 > 解决方案 > 如何根据元素的字段过滤numpy数组

问题描述

我知道我可以使用索引表达式来过滤一个 numpy 数组,如此SO answer所示。

>>> b = a[a>threshold]

但是,如果我需要基于要过滤的数组字段的逻辑条件怎么办?例如:

>>> arr = np.arange(12).reshape((3, 4))
>>> arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

当我尝试基于第三个字段/列做一个类似的过滤器时:

>>> b = arr[arr[2]>0]

我收到一个错误

回溯(最近一次通话最后):

文件“”,第 1 行,在

IndexError:布尔索引与维度 0 上的索引数组不匹配;维度为 3,但对应的布尔维度为 4

我无法获得过滤后的数组。我需要的是以下列表理解的相同结果:

[r for r in aa if r[2] > 0]

aa =  [[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]]

基于字段/列进行过滤的正确方法是什么?

标签: pythonarraysnumpy

解决方案


推荐阅读