При попытке удалить только один элемент во вложенном массиве NumPy весь подмассив удаляется - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть 3-мерный массив Numpy (temp_X), например:

[[[23,34,45,56], [34,45,67,78], [23 , 45,67,78]],

[[12,43,65,43], [23,54,67,87], [ 12 , 32, 34,43]],

[[43,45,86,23], [23,45,56,23], [ 12 , 23,65,34]]]

Я хочу удалить 1-й элемент каждого 3-го подмассива (выделенные значения).

, показанный ниже, является кодом, который я попробовал:

for i in range(len(temp_X)):
    temp_X = np.delete(temp_X[i][(len(temp_X[i]) - 1)], [0])

Каким-то образом, когда я запускаю код, весь массив удаляется за исключением 3 значений.Буду признателен за любую оказанную помощь.Заранее спасибо.

1 Ответ

0 голосов
/ 02 декабря 2018

С a в качестве входного массива 3D, есть один способ -

m = np.prod(a.shape[1:])
n = m-a.shape[-1]
out = a.reshape(a.shape[0],-1)[:,np.r_[:n,n+1:m]]

Альтернатива последнему шагу с логическим индексированием -

out = a.reshape(a.shape[0],-1)[:,np.arange(m)!=n]

Пример ввода, вывода -

In [285]: a
Out[285]: 
array([[[23, 34, 45, 56],
        [34, 45, 67, 78],
        [23, 45, 67, 78]],

       [[12, 43, 65, 43],
        [23, 54, 67, 87],
        [12, 32, 34, 43]],

       [[43, 45, 86, 23],
        [23, 45, 56, 23],
        [12, 23, 65, 34]]])

In [286]: out
Out[286]: 
array([[23, 34, 45, 56, 34, 45, 67, 78, 45, 67, 78],
       [12, 43, 65, 43, 23, 54, 67, 87, 32, 34, 43],
       [43, 45, 86, 23, 23, 45, 56, 23, 23, 65, 34]])

Вот еще один с созданием маски для маскировки по двум последним осям -

mask = np.ones(a.shape[-2:],dtype=bool)
mask[-1,0] = 0
out = np.moveaxis(a,0,-1)[mask].T
...