Как удалить объект из массива numpy, не зная индекса
можно ли удалить объект из массива numpy, не зная индекс объекта, но вместо этого зная сам объект?
Я видел, что можно использовать индекс объекта, используя np.удалить функцию, но я ищу способ сделать это, имея объект, но не его индекс
пример:
[a,b,c,d,e, f]
x = e
Я хотел бы удалить x
thx в заранее
3 ответов
вы можете найти индекс / индексы объекта, используя np.argwhere, а затем удалить объект(ы) с помощью np.удалить.
пример:
x = np.array([1,2,3,4,5])
index = np.argwhere(x==3)
y = np.delete(x, index)
print(x, y)
приведите его как массив numpy, и есть очень простой способ:
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
работает.
там некоторые важные ограничения:
этот тест равенства (или не равенства) должен работать для ваших ценностей. А может, и нет, если элементы-это поплавки.
удаление из массива 1d проще, чем из 2d (или большего). С 2d вы должны решить, удалять ли строку, столбец или элемент (и в процессе выравнивания массива).
удаление только одного элемента из этих совпадений немного похитрее.
в некоторых случаях может быть лучше .tolist()
массив и используйте метод list.
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
для массивов.