我只想从 a 中选择某些行NumPy http://en.wikipedia.org/wiki/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]])
我缺少的 NumPy 本身是否有更好的方法来做到这一点?