Метод Python numpy.where(): синтаксис и как использовать

    Команда Simple-Server
    03.06.2026
    7 мин

    Материал подготовлен командой 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.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны