Векторные условия — это условия, которые применяются сразу ко всем элементам массива, а не к одному значению, как в обычном if. В NumPy они лежат в основе векторизации и почти всегда приводят к булевым маскам.
Идея:
условие записывается один раз, а проверяется автоматически для каждого элемента массива.
Простейший пример:
import numpy as np
a = np.array([1, 5, 10, 15])
a > 5
# [False False True True]Результат — булев массив той же формы, а не одно значение True/False.
Сравнения выполняются поэлементно:
a == 10
a != 0
a >= 3
a < 100Комбинирование условий:
(a > 3) & (a < 12)
# [False True True False]Важно:
– использовать &, |, ~
– каждое условие в скобках
– and / or / not с массивами не работают
Векторные условия + индексация:
a[(a > 3) & (a < 12)]
# [5 10]Это замена конструкции вида:
for x in a:
if 3 < x < 12:
...Применение к 2D массивам:
M = np.array([[1, -2, 3],
[4, -5, 6]])
M[M < 0]
# [-2 -5]Условное изменение значений:
a = np.array([1, -2, 3, -4])
a[a < 0] = 0
# [1 0 3 0]Альтернатива через np.where:
np.where(a > 0, a, 0)Это тоже векторное условие, но в функциональной форме.
Практический смысл:
– фильтрация данных
– очистка выбросов
– условные преобразования
– логика без for и if
Коротко:
векторные условия — это поэлементные логические выражения над массивами, которые возвращают булевы маски и позволяют писать условную логику в векторизованном виде.