Python numpy:如何根据一系列标准选择行

Python numpy:如何根据一系列标准选择行,python,arrays,numpy,Python,Arrays,Numpy,如何获取第二列等于4或6的行 a = np.array(np.mat('1 2; 3 4; 5 6; 7 4')) b = [4,6] 显然,这是行不通的: c = a[a[:,1] in b] 您可以使用itertools.ifilter: from itertools import ifilter c = np.array([ e for e in ifilter(lambda x: x[1] in b, a) ]) >> array([[3,4], [5

如何获取第二列等于4或6的行

a = np.array(np.mat('1 2; 3 4; 5 6; 7 4'))
b = [4,6]
显然,这是行不通的:

c = a[a[:,1] in b]

您可以使用itertools.ifilter:

from itertools import ifilter
c = np.array([ e for e in ifilter(lambda x: x[1] in b, a) ])
>> array([[3,4],
          [5,6],
          [7,4]])
[x代表a中的x,如果(4,6,)]中的x[1]应该适用于您提到的情况

编辑:正如@geogesl所建议的,“理想的方法”是在构造数组时使用迭代器,而不是在字符串上使用numpy.mat方法。

您可以:

check = np.logical_or(a[:,1]==4, a[:,1]==6)
c = a[check,:]
您还可以对逻辑运算符
使用

check = (a[:,1]==4) | (a[:,1]==6)

numpythonic实现这一点的方法是使用,比如:

a[np.in1d(a[:, 1], b)]

这对于大型阵列来说非常缓慢。使用NumPy数组时,最好使用矢量化的习惯用法。是什么告诉您OP使用的是大型数组?我广泛使用Numpy,但不处理大数据。与georgesl的回答相同的反对意见是:这是不必要的慢,因为它没有使用Numpy的矢量化操作。larsmans说,尽管没有针对这些操作进行优化是一个合理的担忧,但正如@georgesl的评论所说,它仍然是有效的。OP没有明确表示要使用大型阵列。