Удалить указанный индекс столбца из каждой строки двумерного массива - PullRequest
1 голос
/ 24 сентября 2019

У меня есть пустой массив A следующим образом:

array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

и другой пустой массив column_indices_to_be_deleted следующим образом:

array([1, 0, 2])

Я хочу удалить элемент из каждой строки указанного Aпо индексам столбцов в column_indices_to_be_deleted.Итак, индекс столбца 1 из строки 0, индекс столбца 0 из строки 1 и индекс столбца 2 из строки 2 в этом случае, чтобы получить новый массив, который выглядит следующим образом:

array([[1, 3],
       [5, 6],
       [7, 8]])

Что будет самым простымспособ сделать это?

1 Ответ

2 голосов
/ 24 сентября 2019

В одну сторону с masking, созданным с помощью broadcatsed-comparison -

In [43]: a # input array
Out[43]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

In [44]: remove_idx # indices to be removed from each row
Out[44]: array([1, 0, 2])

In [45]: n = a.shape[1]

In [46]: a[remove_idx[:,None]!=np.arange(n)].reshape(-1,n-1)
Out[46]: 
array([[1, 3],
       [5, 6],
       [7, 8]])

Другой подход на основе mask с маской, созданной с помощью array-assignment -

In [47]: mask = np.ones(a.shape,dtype=bool)

In [48]: mask[np.arange(len(remove_idx)), remove_idx] = 0

In [49]: a[mask].reshape(-1,a.shape[1]-1)
Out[49]: 
array([[1, 3],
       [5, 6],
       [7, 8]])

Другой сnp.delete -

In [64]: m,n = a.shape

In [66]: np.delete(a.flat,remove_idx+n*np.arange(m)).reshape(m,-1)
Out[66]: 
array([[1, 3],
       [5, 6],
       [7, 8]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...