При попытке удалить только один элемент во вложенном массиве NumPy весь подмассив удаляется
У меня есть 3-х мерный массив Numpy, как:
[[[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 ответ
С 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