Чтобы отфильтровать двумерный массив NumPy по условию в Python, вы можете использовать такие методы, как логическое индексирование для прямого поэлементного выбора, np.where() для поиска элементов и комбинировать условия с помощью логических операторов.

Кроме того, np.all() и np.any() полезны для фильтрации по строкам или по столбцам на основе однородных или любых истинных условий соответственно. Для более сложных критериев np.asarray() с помощью метода mean() может преобразовывать структуры данных и применять совокупные проверки условий.

Содержание

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.

С помощью функции np.where()

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

С использованием метода numpy.any()

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.

С использованием функции np.all()

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 снимок экрана указан ниже.

С помощью функции np.asarray()

Добавить комментарий