Ответ 1
Вы можете найти индекс/индексы объекта с помощью np.argwhere, а затем удалить объект с помощью np.delete.
Пример:
x = np.array([1,2,3,4,5])
index = np.argwhere(x==3)
y = np.delete(x, index)
print(x, y)
Можно ли удалить объект из массива numpy без знания индекса объекта, но вместо этого зная сам объект?
Я видел, что можно использовать индекс объекта, используя функцию np.delete, но я ищу способ сделать это с объектом, но не с индексом
пример:
[а, б, в, г, д, е]
x = e
Я хотел бы удалить x
спасибо заранее
Вы можете найти индекс/индексы объекта с помощью np.argwhere, а затем удалить объект с помощью np.delete.
Пример:
x = np.array([1,2,3,4,5])
index = np.argwhere(x==3)
y = np.delete(x, index)
print(x, y)
Примените его как массив numy и замаскируйте его:
x = np.array(list("abcdef"))
x = x[x!='e'] # <-- THIS IS THE METHOD
print x
# array(['a', 'b', 'c', 'd', 'f'])
Не должно быть более сложным, чем это.
Булевское индексирование или маскирование является хорошим базовым способом выбора или удаления определенных элементов массива
Вы говорите об удалении определенного "объекта". Возьмем это буквально и определим массив объекта dtype:
In [2]: x=np.array(['a','b','c','d','e'],dtype=object)
In [3]: x
Out[3]: array(['a', 'b', 'c', 'd', 'e'], dtype=object)
In [4]: x=='d' # elements that equal 'd'
Out[4]: array([False, False, False, True, False], dtype=bool)
In [5]: x!='d' # elements that don't
Out[5]: array([ True, True, True, False, True], dtype=bool)
In [6]: x[x!='d'] # select a subset
Out[6]: array(['a', 'b', 'c', 'e'], dtype=object)
За кулисами argwhere
и delete
используйте это. Обратите внимание, что argwhere
использует логический массив x==d
, преобразовывая его в индексы массива. И создание такой маски - это способ, которым работает delete
.
Существуют некоторые важные ограничения:
чтобы проверка равенства (или не равенства) работала для ваших значений. Это может быть не так, если элементы являются float.
удаление из массива 1d проще, чем из 2d (или более). С помощью 2d вам нужно решить, следует ли удалять строку, столбец или элемент (и в процессе сглаживания массива).
Удаление только одного элемента из этих совпадений немного сложнее.
В некоторых случаях может быть лучше .tolist()
массива и использовать метод списка.
In [32]: xl=x.tolist()
In [33]: xl.remove('d')
In [34]: np.array(xl,dtype=object)
Out[34]: array(['a', 'b', 'c', 'e'], dtype=object)
Нет точного эквивалента list.remove
для массивов.
arr = np.array(['a','b','c','d','e','f'])
затем
arr = [x for x in arr if arr != 'e']