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]
4

4 回答 4

10

这样做的 numpythonic 方法是使用in1d,例如:

a[np.in1d(a[:, 1], b)]
于 2013-10-01T13:25:06.427 回答
2

[x for x in a if x[1] in (4,6,)] 应该针对您提到的情况执行此操作。

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

于 2013-10-01T08:53:31.583 回答
2

你可以做:

check = np.logical_or(a[:,1]==4, a[:,1]==6)
c = a[check,:]

您还可以使用|逻辑运算符or

check = (a[:,1]==4) | (a[:,1]==6)
于 2013-10-01T09:25:28.150 回答
1

你可以使用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]])
于 2013-10-01T08:37:16.853 回答