Numpy Indexing First Boolean - PullRequest
       0

Numpy Indexing First Boolean

0 голосов
/ 26 октября 2018

В логическом массиве я пытаюсь получить индекс столбца первого True. argmax работает хотя бы с одним True, но по понятным причинам max (False) равно 0. Мне интересно, каким будет лучший метод, учитывая очень большой массив.

name = np.array(['a', 'b', 'c', 'd'])
boolarr = np.array([[True, False, False, True],
                    [False, False, True, True],
                    [False, False, False, False]])
colidx = np.argmax(boolarr,axis=1)
print(name[colidx]) #result: ['a', 'c', 'a'] desired: ['a', 'c', None]

1 Ответ

0 голосов
/ 26 октября 2018

Вы не можете изменить поведение argmax, поскольку максимум строки со всеми False равен 0. Однако вы можете использовать any, чтобы определить строки, содержащие все False и используйте np.where для маскировки вашего результата:

out = name[colidx]
np.where(boolarr.any(1), out, None)

array(['a', 'c', None], dtype=object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...