Python numpy按条件过滤二维数组

这里的Python新手,我已阅读numpy数组的Filter行?和文档,但仍然不知道如何以python方式进行编码。

我有以下示例数组:(实际数据为50000 x 10)

a = numpy.asarray([[2,'a'],[3,'b'],[4,'c'],[5,'d']])

filter = ['a','c']

我需要找到所有行aa[:, 1] in filter。预期结果:

[[2,'a'],[4,'c']]

我当前的代码是这样的:

numpy.asarray([x for x in a if x[1] in filter ])

可以,但是我在某处读到它效率不高。什么是适当的numpy方法呢?

编辑:

感谢您提供所有正确答案!不幸的是,我只能将其中一个标记为可接受的答案。我很惊讶numpy.in1dGoogle搜索中没有出现numpy filter

2d array

回答:

您可以使用bool可以产生的索引数组np.in1d

您可以使用所需的np.ndarray任意值对a进行索引axis,例如使用bools数组来指示是否应包含元素。由于您要沿索引axis=0,这意味着您要从最远的索引中进行选择,因此需要具有1D,np.array其长度为行数。它的每个元素都将指示是否应包含该行。

一种快速的方法是np.in1d在的第二列上使用a。您可以通过获得该列的所有元素a[:,

1]。现在,您有了一个1D

np.array,应该根据您的过滤器检查其元素。那np.in1d是为了什么。

因此完整的代码如下所示:

import numpy as np

a = np.asarray([[2,'a'],[3,'b'],[4,'c'],[5,'d']])

filter = np.asarray(['a','c'])

a[np.in1d(a[:, 1], filter)]

或更长的形式:

import numpy as np

a = 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

回到顶部