Чтобы отфильтровать двумерный массив NumPy по условию в Python, вы можете использовать такие методы, как логическое индексирование для прямого поэлементного выбора, np.where() для поиска элементов и комбинировать условия с помощью логических операторов.
Кроме того, np.all() и np.any() полезны для фильтрации по строкам или по столбцам на основе однородных или любых истинных условий соответственно. Для более сложных критериев np.asarray() с помощью метода mean() может преобразовывать структуры данных и применять совокупные проверки условий.
- 1. С использованием логической индексации
- 2. С помощью функции np.where()
- 3. С использованием условий объединения
- 4. С использованием метода numpy.any()
- 5. С использованием функции np.all()
- 6. С помощью функции np.asarray()
1. С использованием логической индексации
Логическое индексирование в NumPy позволяет нам фильтровать массив с помощью логического выражения. Вот пример:
import numpy as np
stock_prices = np.random.uniform(45, 100, size=(30, 5))
days_with_low_prices = stock_prices[stock_prices < 50]
print("Days with stock prices below $50:\n", days_with_low_prices)
Выход:
Days with stock prices below $50: [46.07200099 49.96345168 47.27621964 48.67303959 49.542139 46.54178479 49.45113595 47.25793938 47.46435936 48.81178511 45.55335432 45.29821599 49.06888685]
Результат запуска кода в PyCharm визуально представлен на снимке экрана ниже.

2. С помощью функции np.where()
Функция np.where() — это универсальный способ фильтрации 2D-массива NumPy по условию в Python. Он возвращает индексы элементов, удовлетворяющих заданному условию.
import numpy as np
covid_cases = np.random.randint(800, 1500, size=(4, 3))
hotspots = np.where(covid_cases > 1000)
print("Weeks and states with more than 1000 cases:\n", hotspots)
Выход:
Weeks and states with more than 1000 cases: (array([0, 0, 1, 1, 2], dtype=int64), array([0, 1, 1, 2, 0], dtype=int64))
Ниже показан снимок экрана, на котором запечатлен результат выполнения кода в редакторе PyCharm.

3. С использованием условий объединения
Мы можем объединить несколько условий, используя логические операторы, такие как &(и) и |(или) в NumPy отфильтровать 2D-массив по условию в Python.
import numpy as np
developer_data = np.random.randint(400, 800, size=(10, 1))
manager_data = np.random.randint(20, 50, size=(10, 1))
combined_data = np.hstack((developer_data, manager_data))
high_ratio_company = combined_data[(combined_data[:, 0] > 500) &(combined_data[:, 1] < 30)]
print("companies with high developer-to-manager ratio:\n", high_ratio_company)
Выход:
companies with high developer-to-manager ratio: [[784 28] [582 21] [761 27]]
На следующем снимке экрана показаны результаты, полученные при выполнении кода в редакторе PyCharm.

4. С использованием метода numpy.any()
Метод np.any() проверяет, имеет ли какой-либо элемент массива вдоль заданной оси значение True.
Он часто используется при фильтрации, чтобы проверить, удовлетворяет ли какой-либо элемент массива или подмассива условию Python.
import numpy as np
temperature_data = np.array([
[90, 85, 92, 88],
[95, 102, 99, 101],
[88, 91, 87, 89],
[101, 98, 95, 102]
])
heatwave_weeks = temperature_data[np.any(temperature_data > 100, axis=1)]
print("Heatwave Weeks:\n", heatwave_weeks)
Выход:
Heatwave Weeks: [[ 95 102 99 101] [101 98 95 102]]
После выполнения кода в Pycharm результат можно увидеть на снимке экрана ниже.

5. С использованием функции np.all()
Функция np.all() в Python проверяет, удовлетворяют ли все элементы вдоль указанной оси условию.
Это полезно для фильтрации полных строк или столбцов на основе однородного условия.
import numpy as np
aqi_data = np.array([
[45, 40, 50],
[55, 60, 52],
[42, 38, 47],
[30, 28, 35]
])
good_air_quality_days = aqi_data[np.all(aqi_data < 50, axis=1)]
print("Good Air Quality Days:\n", good_air_quality_days)
Выход:
Good Air Quality Days: [[42 38 47] [30 28 35]]
Ниже приведен скриншот после реализации кода в редакторе Pycharm.

6. С помощью функции np.asarray()
Функция np.asarray() в Python преобразует входные данные в массив.
Хотя это не функция фильтрации как таковая, она может быть частью процесса фильтрации, особенно при работе с данными, которые изначально не могут быть в форме массива.
import numpy as np
Match_scores_list = [
[1050, 1100, 1020],
[1250, 1300, 1280],
[1150, 1200, 1180],
]
Match_scores = np.asarray(Match_scores_list)
high_scoring_company = Match_scores[np.mean(Match_scores, axis=1) > 1200]
print("High Scoring company:\n", high_scoring_company)
Выход:
High Scoring company: [[1250 1300 1280]]
После реализации кода в редакторе Pycharm снимок экрана указан ниже.
