Подтвердить что ты не робот

Numpy где() на двумерной матрице

У меня есть такая матрица

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.

4b9b3361

Ответ 1

В общем случае, когда ваша строка поиска может находиться в любом столбце, вы можете сделать это:

>>> rows, cols = np.where(t == 'bar')
>>> t[rows]
array([['2', '3', '4', 'bar'],
       ['8', '9', '1', 'bar']],
      dtype='|S11')

Ответ 2

Вы должны нарезать массив на col, который хотите индексировать:

rows = np.where(t[:,3] == 'bar')
result = t1[rows]

Это возвращает:

 [[2,3,4,'bar'],
  [8,9,1,'bar']]