Python numpy按条件过滤二维数组

发布于 2021-01-29 16:49:06

这里的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

关注者
0
被浏览
192
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用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]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看