Python numpy按条件过滤二维数组
这里的Python新手,我已阅读numpy数组的Filter行?和文档,但仍然不知道如何以python方式进行编码。
我有以下示例数组:(实际数据为50000 x 10)
a = numpy.asarray([[2,'a'],[3,'b'],[4,'c'],[5,'d']])filter = ['a','c']
我需要找到所有行a
与a[:, 1] in filter
。预期结果:
[[2,'a'],[4,'c']]
我当前的代码是这样的:
numpy.asarray([x for x in a if x[1] in filter ])
可以,但是我在某处读到它效率不高。什么是适当的numpy方法呢?
编辑:
感谢您提供所有正确答案!不幸的是,我只能将其中一个标记为可接受的答案。我很惊讶numpy.in1d
Google搜索中没有出现numpy filter
2d array。
回答:
您可以使用bool
可以产生的索引数组np.in1d
。
您可以使用所需的np.ndarray
任意值对a进行索引axis
,例如使用bool
s数组来指示是否应包含元素。由于您要沿索引axis=0
,这意味着您要从最远的索引中进行选择,因此需要具有1D,np.array
其长度为行数。它的每个元素都将指示是否应包含该行。
一种快速的方法是np.in1d
在的第二列上使用a
。您可以通过获得该列的所有元素a[:,
1]。现在,您有了一个1D
np.array
,应该根据您的过滤器检查其元素。那np.in1d
是为了什么。
因此完整的代码如下所示:
import numpy as npa = np.asarray([[2,'a'],[3,'b'],[4,'c'],[5,'d']])
filter = np.asarray(['a','c'])
a[np.in1d(a[:, 1], filter)]
或更长的形式:
import numpy as npa = np.asarray([[2,'a'],[3,'b'],[4,'c'],[5,'d']])
filter = np.asarray(['a','c'])
mask = np.in1d(a[:, 1], filter)
a[mask]
以上是 Python numpy按条件过滤二维数组 的全部内容, 来源链接: utcz.com/qa/416566.html