Я хочу выбрать только определенные строки из массива 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, которого мне не хватает?