NumPy: удалить элемент из 3-мерного массива

#python-3.x #numpy #numpy-ndarray

#python-3.x #numpy #numpy-ndarray

Вопрос:

У меня есть 2-мерный массив, каждый элемент которого представляет собой список допустимых значений (псевдосинтаксис):

 [ [1,2] [1,2]
  [1,2] [1,2] ]
  

таким образом, фактически это 3-тусклый массив / список / матрица (независимо от того, что Python называет их.)

Он генерируется

     import numpy as np
    grid = np.full((borderSize, borderSize, borderSize), range(1, borderSize   1))
  

Как лучше всего удалить значение из массива на «самом глубоком» уровне?

 Pseudocode:

grid = [ [1,2] [1,2]
  [1,2] [1,2] ]

grid[0,1].remove(not index but value 2)

#result: grid = [ [1,2] [1]
                  [1,2] [1,2] ]
  

Я попробовал все решения, которые смог найти в Google, включая numpy.delete() и array.remove() , любой, какой бы ни был этот синтаксис : arr = arr[ (arr >= 6) amp; (arr <= 10) ] . Кажется, что все подходы «сглаживают» массив / список / матрицу или выдают загадочные для меня ошибки («не удается преобразовать массив в форму»)

Спасибо!

Ответ №1:

Массивы на самом деле не имеют такого понятия, как «самый глубокий» уровень, у них есть измерения, и каждое измерение должно быть определено глобально. Вы можете изменить свой массив на список, а затем удалить элемент следующим образом:

 grid = np.array([ [1,2], [1,2],
  [1,2], [1,2] ])

grid = grid.tolist()

del grid[1][1]

grid
  

Результат:

 [[1, 2], [1], [1, 2], [1, 2]]
  

но вы не можете сделать это в массиве.

Комментарии:

1. Спасибо! Быстрая проверка работоспособности: я не могу преобразовать этот список обратно в массив, поскольку не каждый «элемент» имеет одинаковое количество элементов — правильно?

2. да, массивы должны иметь определенные размеры. вы можете увидеть размер вашего массива, набрав grid.shape