Чтобы отфильтровать двумерный массив 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 снимок экрана указан ниже.