我只想根据第二列中的值从NumPy数组中选择某些行。例如,这个测试数组在第二列中有1到10的整数。>>> test = numpy.array([numpy.arange(100), numpy.random.randint(1, 11, 100)]).transpose()
>>> test[:10, :]
array([[ 0, 6],
[ 1, 7],
[ 2, 10],
[ 3, 4],
[ 4, 1],
[ 5, 10],
[ 6, 6],
[ 7, 4],
[ 8, 6],
[ 9, 7]])
如果我只想要第二个值为4的行,那么很容易:>>> test[test[:, 1] == 4]
array([[ 3, 4],
[ 7, 4],
[16, 4],
...
[81, 4],
[83, 4],
[88, 4]])
但是,当有多个需要的值时,我如何实现相同的结果呢?
通缉令可以是任意长度的。例如,我可能需要第二列为2、4或6的所有行:>>> wanted = [2, 4, 6]
我想到的唯一方法是使用列表理解,然后将其转换回数组,这看起来太复杂了,尽管它有效:>>> test[numpy.array([test[x, 1] in wanted for x in range(len(test))])]
array([[ 0, 6],
[ 3, 4],
[ 6, 6],
...
[90, 2],
[91, 6],
[92, 2]])
有没有更好的办法在我失踪的纽比这样做呢?