Один лайнер для получения массива позиций из NUMPY массива в python - PullRequest
1 голос
/ 27 мая 2020

У меня есть следующий массив numpy с именем histarr с формой 1, 13

array([0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0], dtype=uint32)

Я хочу получить массив, который дает мне позиции, где находятся единицы, поэтому я использовал np.where

where_are_ones_arr = np.where(histarr == 1)

Результат:

(array([1, 2, 4, 5, 6], dtype=int32),)

Некоторое время я был в замешательстве, но потом я проверил тип и понял, что where_are_ones_arr не массив, а на самом деле кортеж, поэтому, если бы я хотел получить массив, который я использовал:

where_are_ones_arr[0]

Результат:

array([1, 2, 4, 5, 6], dtype=int32)

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

where_are_ones_give_me_only_array = histarr[np.where(histarr == 1)]

Но он выплевывает:

array([1, 1, 1, 1, 1], dtype=uint32)

Чего я не хочу и что я могу объяснить? Что я не понимаю?

1 Ответ

1 голос
/ 27 мая 2020

Вы должны сделать это в одной строке:

np.where(histarr == 1)[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...