numpy индексирование массива: применение условия ко всей строке / столбцу - PullRequest
1 голос
/ 11 января 2020

У меня есть этот массив:

a=array([[0. , 0.3, 0.2],
       [0.5, 0. , 0.1]])

и этот пользовательский метод min:

def custom_min(l_):
    return min([x for x in l_ if x>0])

Как применить это к строкам, чтобы выбрать некоторые из них? Например, если для строки custom_min> 0,1 эта строка должна быть выбрана: т.е.

b = [[0. , 0.3, 0.2]]

Чтобы было понятно, я ищу методы, подобные этому:

a[a[:,1] > 0.1]

1 Ответ

2 голосов
/ 11 января 2020

Во-первых, вы можете использовать numpy.apply_along_axis, чтобы применить custom_min к каждой строке.

Я бы также переписал custom_min, чтобы получить больше numpythoni c: return min(l_[l_ > 0]).

Теперь, когда у вас есть этот пользовательский минимум в векторе, вы снова можете использовать логическое индексирование:

row_mask = result > 0.3 и filtered_array = a[row_mask, :]

РЕДАКТИРОВАТЬ: немного подумать о том, как сделать все используйте только numpy векторизованные функции. Сначала мы можем использовать numpy.where для замены всего, что меньше 0, на бесконечность. Это учитывает минимум:

row_wise_custom_mins = np.min(np.where(a > 0, a, np.inf), axis=1)

"где" выбирает значения из a, если условие истинно, и np.inf, если условие ложно. Затем мы выбираем минимум (по оси 1) и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...