Учитывая следующую матрицу,
In [0]: a = np.array([[1,2,9,4,2,5],[4,5,1,4,2,4],[2,3,6,7,8,9],[5,6,7,4,3,6]])
Out[0]:
array([[1, 2, 9, 4, 2, 5],
[4, 5, 1, 4, 2, 4],
[2, 3, 6, 7, 8, 9],
[5, 6, 7, 4, 3, 6]])
Я хочу получить индексы строк, которые имеют 9 в качестве члена. Это,
idx = [0,2]
В настоящее время я делаю это,
def myf(x):
if any(x==9):
return True
else:
return False
aux = np.apply_along_axis(myf, axis=1, arr=a)
idx = np.where(aux)[0]
И я получаю желаемый результат.
In [1]: idx
Out[1]: array([0, 2], dtype=int64)
Но этот метод очень медленный (имеется в виду, может быть, есть более быстрый путь) и, конечно, не очень pythoni c.
Как я могу сделать это более чистым, более pythoni c, но в основном более эффективным способом?
Обратите внимание, что этот вопрос близок к этот но здесь я хочу применить условие ко всей строке.