Python 新手,我读过 Filter rows of a numpy array? 和文档,但仍然无法弄清楚如何以 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
没有出现在谷歌搜索中 numpy filter 2d array
。
原文由 Reed 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用
bool
可以使用np.in1d
生成的索引数组。您可以索引
np.ndarray
沿着任何axis
您想要使用例如bool
的数组来指示是否应包含一个元素。由于您想沿axis=0
进行索引,这意味着您要从最外边的索引中进行选择,因此您需要具有 1Dnp.array
其长度为行数。它的每个元素都将指示是否应包括该行。一个快速的方法是在
np.in1d
的第二列使用a
。您可以通过a[:, 1]
获得该列的所有元素。现在你有一个 1Dnp.array
应该根据你的过滤器检查它的元素。这就是np.in1d
的用途。所以完整的代码看起来像:
或更长的形式: