Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Кратко о задаче
Метод numpy.where() имеет следующий синтаксис:
numpy.where(condition[, x, y])-
condition— условие или массив условий, которые необходимо проверить. -
x— значения, возвращаемые, если условие True. -
y— значения, возвращаемые, если условие False.
condition — условие или массив условий, которые необходимо проверить.
x — значения, возвращаемые, если условие True.
y — значения, возвращаемые, если условие False.
Если аргументы x и y не указаны, метод вернет индексы элементов, удовлетворяющих условию.
Основные способы использования
1. Поиск индексов элементов
Часто возникает необходимость определить позиции элементов, удовлетворяющих определенному условию. numpy.where() позволяет легко это сделать.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
indices = np.where(arr > 3)
print(indices)На примере запуска кода, который помогает нам найти индексы элементов, создается массив [1, 2, 3, 4, 5]. Затем используется функция np.where() для поиска индексов элементов, которые больше 3. На скриншоте примера, в нижней части консоли, мы видим результат (array([3, 4]),), что показывает позиции чисел 4 и 5 в исходном массиве, так как только эти числа удовлетворяют условию arr > 3. В данном примере метод возвращает кортеж с массивом индексов элементов, больших 3.
2. Замена элементов по условию
Метод numpy.where() широко используется для условной замены элементов в массиве.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
result = np.where(arr > 3, 100, arr)
print(result)Запуск кода который отвечает за замену элементов по условию, начинается с создания массива [1, 2, 3, 4, 5]. Затем применяется функция np.where() для поиска элементов, которые больше 3, с дополнительным параметром 100, что позволяет заменить эти элементы на указанное значение. На скриншоте результата в нижней части консоли мы видим массив [1 2 3 100 100], где элементы 4 и 5 были заменены на 100, так как они удовлетворяют условию arr > 3. В данном случае метод np.where() заменяет все элементы, удовлетворяющие условию, на заданное значение.
3. Работа с многомерными массивами
Метод numpy.where() также эффективно работает с многомерными массивами.
import numpy as np
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
result = np.where(matrix % 2 == 0, 'четное', 'нечетное')
print(result)Пример создания матрицы [[1, 2, 3], [4, 5, 6], [7, 8, 9]]. Затем применяется функция np.where(), чтобы заменить элементы в зависимости от условия: если число четное (делится на 2 без остатка), оно заменяется на строку 'четное', а если нечетное — на строку 'нечетное'. На скриншоте результата в нижней части консоли мы видим матрицу, где все числа заменены соответствующими строками по заданному условию. В данном примере метод возвращает обновленную матрицу, содержащую строки вместо чисел.
4. Применение нескольких условий
Используя логические операторы, можно применять numpy.where() к более сложным условиям.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
result = np.where((arr > 3) & (arr < 7), arr * 2, arr)
print(result)На примере выполнения кода с использованием NumPy создается массив [1, 2, 3, 4, 5, 6, 7, 8, 9]. Затем используется функция np.where() с комбинированным условием: если число больше 3 и меньше 7, оно умножается на 2, в противном случае остается без изменений. На скриншоте примера в нижней части консоли мы видим результат [1 2 3 8 10 12 7 8 9], где числа 4, 5 и 6 были умножены на 2, так как они удовлетворяют условию. В данном примере метод возвращает новый массив с измененными значениями, соответствующими условию.
Работа с температурными данными
Предположим, у нас есть массив температур, и мы хотим классифицировать их как «жарко» или «комфортно».
import numpy as np
temperatures = np.array([23, 25, 28, 32, 35, 29])
status = np.where(temperatures > 30, 'жарко', 'комфортно')
print(status)Сначала мы в примере видим создание температур [23, 25, 28, 32, 35, 29]. Затем применяется функция np.where() для определения комфортности температуры: если температура больше 30 градусов, присваивается статус 'жарко', в противном случае — 'комфортно'. На скриншоте результата в нижней части консоли мы видим массив ['комфортно', 'комфортно', 'комфортно', 'жарко', 'жарко', 'комфортно'], где температуры 32 и 35 градусов помечены как 'жарко', так как они превышают пороговое значение. В данном примере метод возвращает новый массив, содержащий строковые значения, отражающие оценку температуры.
Обработка пропущенных значений
В наборах данных часто встречаются пропуски, которые необходимо заменить или обработать.
import numpy as np
data = np.array([1, np.nan, 3, np.nan, 5])
cleaned_data = np.where(np.isnan(data), 0, data)
print(cleaned_data)Создание массива с пропущенными значениями [1, np.nan, 3, np.nan, 5]. Затем применяется функция np.where() в сочетании с np.isnan() для замены отсутствующих значений (NaN) на 0. На скриншоте примера в нижней части консоли мы видим результат [1, 0, 3, 0, 5], где значения NaN были заменены на 0, а остальные элементы остались без изменений. В этом примере метод используется для очистки данных от пропущенных значений.
| Характеристика | numpy.where() | Циклы | List Comprehension |
|---|---|---|---|
| Скорость | Высокая | Низкая | Средняя |
| Потребление памяти | Среднее | Высокое | Среднее |
| Читаемость | Высокая | Средняя | Высокая |
| Векторизация | Да | Нет | Частично |
| Гибкость | Высокая | Высокая | Высокая |
Из таблицы видно, что numpy.where() превосходит традиционные циклы и списковые включения по скорости и эффективности использования памяти, сохраняя при этом высокую читаемость и гибкость.
Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.