Я предпочитаю использовать NP.where для индексации таких задач (а не NP.ix_ )
Что не упоминается в OP, так это то, выбран ли результат по местоположению (строка / столбец в исходном массиве) или по какому-либо условию (например, m> = 5). В любом случае приведенный ниже фрагмент кода охватывает оба сценария.
Три шага:
создать массив условий ;
генерирует индексный массив , вызывая NP.where , передавая это
массив условий; и
применить этот индексный массив к исходному массиву
>>> import numpy as NP
>>> cnd = (m==1) | (m==5) | (m==7) | (m==6)
>>> cnd
matrix([[ True, False],
[False, True],
[ True, False],
[ True, False]], dtype=bool)
>>> # generate the index array/matrix
>>> # by calling NP.where, passing in the condition (cnd)
>>> ndx = NP.where(cnd)
>>> ndx
(matrix([[0, 1, 2, 3]]), matrix([[0, 1, 0, 0]]))
>>> # now apply it against the source array
>>> m[ndx]
matrix([[1, 5, 7, 6]])
Аргумент, передаваемый NP.where, cnd , является логическим массивом, который в данном случае является результатом одного выражения, состоящего из составных условных выражений (первая строка выше)
Если создание такого фильтра значений не относится к вашему конкретному случаю использования, это нормально, вам просто нужно сгенерировать фактическую логическую матрицу (значение cnd ) другим способом (или создайте его напрямую).