Как удалить столбцы в NumPy в соответствии с бинарной маской? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть двоичный вектор длины n.[0, 0, 0, 1 ....] Как удалить столбцы матрицы размером n * m в numpy, что соответствует значению 1 в двоичном векторе?

Есть ли какие-либопростые или изящные способы сделать это?

1 Ответ

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

Если вы имеете в виду, что у вас матрица m*n, то вы можете использовать свой двоичный массив в качестве логического значения для индексации своей матрицы:

mat[:,bin_vect.astype('bool')]

Пример:

n=5
bin_vect = np.random.choice([0,1],n)

>>> bin_vect
array([1, 0, 0, 1, 1])

mat = np.random.random(size=(10,n))
>>> mat
array([[0.15735662, 0.65755895, 0.30765648, 0.31206966, 0.26966997],
       [0.6809805 , 0.25911918, 0.97581884, 0.04420062, 0.08590758],
       [0.89132816, 0.81135223, 0.70684902, 0.72172889, 0.13525593],
       [0.23461475, 0.40596346, 0.53653079, 0.29897461, 0.07874171],
       [0.3729509 , 0.3591687 , 0.26103426, 0.60064124, 0.94791038],
       [0.7525988 , 0.16741262, 0.63850992, 0.43386548, 0.62131853],
       [0.50257526, 0.32734492, 0.15407767, 0.24540467, 0.18555366],
       [0.37653621, 0.09854166, 0.84080664, 0.67745231, 0.57761115],
       [0.92529631, 0.61171514, 0.8233337 , 0.33633327, 0.79718777],
       [0.39061711, 0.01156666, 0.73085425, 0.77808632, 0.86046158]])

>>> mat[:,bin_vect.astype('bool')]
array([[0.15735662, 0.31206966, 0.26966997],
       [0.6809805 , 0.04420062, 0.08590758],
       [0.89132816, 0.72172889, 0.13525593],
       [0.23461475, 0.29897461, 0.07874171],
       [0.3729509 , 0.60064124, 0.94791038],
       [0.7525988 , 0.43386548, 0.62131853],
       [0.50257526, 0.24540467, 0.18555366],
       [0.37653621, 0.67745231, 0.57761115],
       [0.92529631, 0.33633327, 0.79718777],
       [0.39061711, 0.77808632, 0.86046158]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...