У меня есть массив numpy:

arr = array([[[ 0,  1,  2],
    [ 3,  4,  5],
    [ 6,  7,  8]],

   [[ 9, 10, 11],
    [12, 13, 14],
    [15, 16, 17]],

   [[18, 19, 20],
    [21, 22, 23],
    [24, 25, 26]]])

И массив индексов, ind = array([0, 1, 1])

Я хотел бы сделать для i -ой строки в arr удалить ind[i] -й ряд в arr[i], используя только numpy.delete.

Таким образом, по сути более питонический способ сделать это:

x, y, z = arr.shape
new_arr = np.empty((x, y - 1, z))
for i, j in enumerate(ind):
    new_arr[i] = np.delete(arr[i], j, 0)

arr = new_arr.astype(int)

Таким образом, вывод здесь будет:

array([[[ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [15, 16, 17]],

       [[18, 19, 20],
        [24, 25, 26]]])
3
Spellstaker 20 Дек 2018 в 20:12

1 ответ

Лучший ответ

Рабочее решение:

import numpy as np

arr = np.array([[[0, 1, 2],
                 [3, 4, 5],
                 [6, 7, 8]],

                [[9, 10, 11],
                 [12, 13, 14],
                 [15, 16, 17]],

                [[18, 19, 20],
                 [21, 22, 23],
                 [24, 25, 26]]])


a0, a1, a2 = arr.shape
indices = np.array([0, 1, 1])

mask = np.ones_like(arr, dtype=bool)
mask[np.arange(a0), indices, :] = False

result = arr[mask].reshape((a0, -1, a2))
print(result)

Вывод

[[[ 3  4  5]
  [ 6  7  8]]

 [[ 9 10 11]
  [15 16 17]]

 [[18 19 20]
  [24 25 26]]]
3
Spellstaker 20 Дек 2018 в 17:42