Python numpy按条件过滤二维数组

标签 python arrays python-2.7 numpy

这里是 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]。预期结果:

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

我目前的代码是这样的:

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

它工作正常,但我在某处读到它效率不高。什么是正确的 numpy 方法?

编辑:

感谢所有正确答案!不幸的是,我只能将一个标记为已接受的答案。我很惊讶 numpy.in1d 没有出现在谷歌搜索 numpy filter 2d array 中。

最佳答案

您可以使用一个 bool 索引数组,您可以使用 np.in1d 生成它.

您可以在任何 axis 上索引一个 np.ndarray例如,您想要使用一个 bool 数组来指示是否应包含一个元素。由于您希望沿 axis=0 进行索引,这意味着您希望从最远的索引中进行选择,因此您需要具有长度为行数的一维 np.array。它的每个元素都将指示是否应包括该行。

获得此信息的一种快速方法是使用 np.in1da 的第二列。您可以通过 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按条件过滤二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38910258/

相关文章:

python - Azure 函数和 Azure Blob 存储

python - Django 注释字段是否为空

arrays - 如何在ruby中迭代数组中的特定项目

python - 将字典作为命令行参数传递

python - 如何在 python 中导入 OpenSSL

javascript - 使用 Python、BeautifulSoup 进行动态数据 Web 抓取

python - 使用正则表达式从 Python 文本中提取第一个日期

python - numpy 将二维数组保存到文本文件

python - 替换并打印二维列表python中的字符

python - 如何将分类数据更改为二进制数据?