Ree*_*eed 6 python arrays numpy python-2.7
这里的Python新手,我已阅读numpy数组的Filter行?和文档,但仍然不知道如何以python方式进行编码。
我有示例数组:(实际数据为50000 x 10)
a = numpy.asarray([[2,'a'],[3,'b'],[4,'c'],[5,'d']])
filter = ['a','c']
Run Code Online (Sandbox Code Playgroud)
我需要找到所有行a与a[:, 1] in filter。预期结果:
[[2,'a'],[4,'c']]
Run Code Online (Sandbox Code Playgroud)
我当前的代码是这样的:
numpy.asarray([x for x in a if x[1] in filter ])
Run Code Online (Sandbox Code Playgroud)
可以,但是我在某处读到它效率不高。正确的numpy方法是什么?
感谢您提供所有正确答案!不幸的是,我只能将其中一个标记为可接受的答案。令我惊讶的numpy.in1d是,在Google搜索中没有出现numpy filter 2d array。
您可以使用bool可以使用np.in1d.
您可以使用例如指示是否应包含元素的s数组来索引np.ndarray任何axis您想要bool的元素。由于要索引沿axis=0,这意味着要从最外索引中进行选择,因此需要具有np.array长度为行数的1D 。它的每个元素都将指示是否应包括该行。
获得它的一种快速方法是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)]
Run Code Online (Sandbox Code Playgroud)
或以更长的形式:
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]
Run Code Online (Sandbox Code Playgroud)