我是Python的新手,我已经阅读了如何过滤Numpy数组的行?和文档,但仍然无法弄清楚如何以Python的方式编码。
我有一个示例数组:(真实数据为50000 x 10)
a = numpy.asarray([[2,'a'],[3,'b'],[4,'c'],[5,'d']])
filter = ['a','c']
我需要找到a
中所有行,其中a[:, 1]
符合筛选条件。
期望结果:
我需要查找a
中所有符合筛选条件a[:, 1] in filter
的行。期望的结果是:
[[2,'a'],[4,'c']]
我的当前代码如下:
numpy.asarray([x for x in a if x[1] in filter ])
它运行还可以,但我在某处读到它不是很高效。有什么适当的numpy方法可以解决这个问题?
编辑:
感谢所有正确的答案!不幸的是,我只能选择一个作为接受的答案。我惊讶于numpy.in1d
没有出现在numpy filter 2d array
的Google搜索中。
in1d
解决方案更简单(至少在函数调用中),但理解和使用这个解决方案也是很好的。它是一种在许多其他情况下都适用的解决方案。 - hpauljin1d
的解决方案更好。我之前不知道它的存在;甚至在回答之前尝试过谷歌“向量化in”,但出于某种原因,找不到任何东西。 - fjarriin1d
的代码。在这种情况下,我认为它是在filter
上迭代地构建相同的掩码。 - hpaulj