Ответ 1
В общем случае, когда ваша строка поиска может находиться в любом столбце, вы можете сделать это:
>>> rows, cols = np.where(t == 'bar')
>>> t[rows]
array([['2', '3', '4', 'bar'],
['8', '9', '1', 'bar']],
dtype='|S11')
У меня есть такая матрица
t = np.array([[1,2,3,'foo'],
[2,3,4,'bar'],
[5,6,7,'hello'],
[8,9,1,'bar']])
Я хочу получить индексы, в которых строки содержат строку "bar"
В 1d массиве
rows = np.where(t == 'bar')
должен дать мне индексы [0,3], за которыми следует трансляция: -
results = t[rows]
должен дать мне правильные строки
Но я не могу понять, как заставить его работать с массивами 2d.
В общем случае, когда ваша строка поиска может находиться в любом столбце, вы можете сделать это:
>>> rows, cols = np.where(t == 'bar')
>>> t[rows]
array([['2', '3', '4', 'bar'],
['8', '9', '1', 'bar']],
dtype='|S11')
Вы должны нарезать массив на col, который хотите индексировать:
rows = np.where(t[:,3] == 'bar')
result = t1[rows]
Это возвращает:
[[2,3,4,'bar'],
[8,9,1,'bar']]