NumPy: сделать массив фильтров из (N, 2) -образного массива - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть следующий массив:

[[4 9]
 [5 4]
 ...
 [2 9]]

Я хочу отфильтровать этот массив arr таким образом, чтобы у меня были только его элементы, где оба элемента находятся между 0 и 7, и откажитесь от всего остального. До сих пор моим решением было создание массива фильтров, чтобы индексировать его с помощью:

filter_array = ((arr >= 0) & (arr <= 7))

Моя проблема в том, что это возвращает массив той же формы, что и arr:

[[ True False]
 [ True True]
 ...
 [ True False]]

Что я не могу использовать для индексации исходного массива так, как я хочу. Я хочу отбросить всю строку, если какой-либо из элементов не находится между значениями, которые я хочу:

#desired output:
[ False
  True
  ...
  False ]

Я хочу решить это способом "numpy -i sh", так как массив довольно большой, поэтому производительность важна. (Я не хочу просто перебирать его с некоторыми циклами for)

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете сложить по оси = 1 и посмотреть, равна ли она сумме 2:

filtered_array = (filtered_array.sum(1)==2)

Другой способ, где вы можете использовать и оператор:

filtered_array = filter_array[:,0] & filter_array[:,1]

Наконец:

filter_array = filter_array.all(1)

Последний вариант для меня - лучший способ, но вы можете выбрать то, что работает для вас.

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