Numpy удалить столбцы и строки, которые имеют только False или 0 в одной строке - PullRequest
0 голосов
/ 06 ноября 2018

Аналогичный вопрос, который показывает, как сделать столбец или строка : удалить ноль строк 2-D массив Numpy

Я ищу один вкладыш , который может удалять строки и столбцы из массива, который имеет только False или 0. В настоящее время я могу сделать это в две строки следующим образом, и моя попытка сделать это будет в одной строке.

Рассмотрим массив:

arr = array([[[False, False, False, False, False, False, False],
              [False, False, False, False, False, False, False],
              [False, False,  True,  True,  True, False, False],
              [False, False,  True,  True,  True, False, False],
              [False, False,  True,  True,  True, False, False],
              [False, False, False, False, False, False, False],
              [False, False, False, False, False, False, False]]])

Удалить строки

arr_2 = arr[~np.all(arr == False, axis=1), :]
arr_2
array([[False, False,  True,  True,  True, False, False],
       [False, False,  True,  True,  True, False, False],
       [False, False,  True,  True,  True, False, False]])

Удалить столбцы

arr_3 = arr_2[:, ~np.all(arr_2 == False, axis=0)]
arr_3
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]])

Это достигает желаемого результата. Я думаю, что это должно быть выполнимо в одну строку.

Моя попытка в одну строку

arr_4 = arr[~np.all(arr == False, axis=1), ~np.all(arr == False, axis=0)]
arr_4 = array([ True,  True,  True])

Очевидно, что это не желаемый результат

1 Ответ

0 голосов
/ 06 ноября 2018

Создать открытые индексные массивы с помощью np.ix_, а затем индексировать во входной массив -

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