numpy удалить столбец с другим значением в пакете - PullRequest
0 голосов
/ 04 июля 2019

Я хочу спросить, как просто удалять столбцы в пакете по списку. Значение в списке соответствует партии, отличается друг от друга.

Я знаю, что эту проблему можно использовать для решения цикла for, но она слишком медленная ...

Может кто-нибудь дать мне идею ускорить?

массив (размер партии = 3):

[[0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6]]

удалить индекс в списке (размер пакета = 3)

[[2, 3, 4], [1, 2, 6], [0, 1, 5]]

выход:

[[0, 1, 5, 6], [0, 3, 4, 5], [2, 3, 4, 6]]

1 Ответ

0 голосов
/ 04 июля 2019

Предполагая, что массив равен 2d, а индексирование удаляет равное количество элементов в строке, мы можем удалить элементы с логической маской:

In [289]: arr = np.array([[0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5, 6]] 
     ...: )                                                                                                     
In [290]: idx = np.array([[2, 3, 4], [1, 2, 6], [0, 1, 5]])                                                     
In [291]: mask = np.ones_like(arr, dtype=bool)                                                                  
In [292]: mask[np.arange(3)[:,None], idx] = False                                                               
In [293]: arr[mask]                                                                                             
Out[293]: array([0, 1, 5, 6, 0, 3, 4, 5, 2, 3, 4, 6])
In [294]: arr[mask].reshape(3,-1)                                                                               
Out[294]: 
array([[0, 1, 5, 6],
       [0, 3, 4, 5],
       [2, 3, 4, 6]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...