Удаление элементов из numpy array по индексам: решение
Быстрый ответ
Для быстрого исключения элементов из массива numpy можно использовать индексацию по булевому массиву:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
remove = [2, 4]
filtered_arr = arr[~np.isin(arr, remove)]
print(filtered_arr) # [1, 3, 5]
Так, вы воспользовались функцией np.isin
в сочетании с побитовым отрицанием ~
, чтобы отсеить элементы.
Python и неизменяемость
Обратите внимание, что массивы в NumPy являются неизменяемыми, поэтому любые изменения в них приводят к созданию новых массивов. Следите за этим, чтобы поддерживать эффективность использования памяти и выполнения кода.
Удаление на основе индексов: на помощь приходит np.delete
Для удаления элементов по индексам пригодится функция np.delete()
:
arr = np.array([1, 2, 3, 4, 5])
indices_to_remove = [1, 3]
new_arr = np.delete(arr, indices_to_remove)
print(new_arr) # [1, 3, 5]
np.delete
гарантирует, что исходный массив не будет меняться, возвращая новый.
Искусство исключения: работы с множествами с помощью np.setdiff1d
Функция np.setdiff1d()
облегчает работу с наборами данных, позволяя вычитать множества на уровне numpy:
arr = np.array([1, 2, 3, 4, 5])
exclude = np.array([2, 4])
new_arr = np.setdiff1d(arr, exclude)
print(new_arr) # [1, 3, 5]
Оборона: эффективное использование булевых масок
Вы можете также уберечь свой массив от нежелательных элементов, сочетая np.arange
с np.isin
:
arr = np.array([1, 2, 3, 4, 5])
mask = np.isin(np.arange(arr.size), [1, 3])
new_arr = arr[~mask]
print(new_arr) # [1, 3, 5]
Визуализация
Для наглядности представьте себе корзину с фруктами:
Корзина до: [🍏, 🍌, 🍇, 🍓, 🥝, 🍇]
Предположим, вы не любите виноград 🍇. Удаляем его:
numpy_array = numpy_array[numpy_array != 🍇]
Теперь у вас корзина заполнена только любимыми фруктами:
Корзина после: [🍏, 🍌, 🍓, 🥝]
Мастер-класс по рефинированным техникам удаления
Комбинирование условий: совместное использование – это эффективно!
Благодаря NumPy вы можете сочетать условия с помощью логических операций, создавая сложные маски:
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
new_arr = arr[~((arr % 2 == 0) | (arr > 7))]
print(new_arr) # [1, 3, 5, 7]
Использование np.where для скрытого исключения элементов
Если же потребуется исключить элементы по условию, отличный помощник – функция np.where()
:
arr = np.array([1, 2, 3, 4, 5])
indices = np.where(arr < 4)
new_arr = np.delete(arr, indices)
print(new_arr) # [4, 5]
Работа с многомерными массивами: применение np.delete с учетом оси
При работе с многомерными массивами исключение элементов проводите, учитывая ось axis
:
arr = np.array([[1, 2], [3, 4], [5, 6]])
new_arr = np.delete(arr, [0, 2], axis=0)
print(new_arr) # [[3, 4]]
Полезные материалы
- Индексирование массивов ndarrays — Руководство NumPy v1.26
- GitHub – numpy/numpy: Базовый пакет для научных вычислений в Python
- numpy.delete — Руководство NumPy v1.26
- NumPy arange(): Применение функции np.arange() – Real Python
- Маскированные массивы — Руководство NumPy v1.26
- Введение в NumPy – GeeksforGeeks