Фильтрация массивов NumPy

Рекомендации по курсу:

Фильтрация массива

В NumPy мы используем список булевых индексов для фильтрации массива.

Булевы индексы списка - это список булевых значений, соответствующих индексам в массиве.

если значение по индексу Trueэлемент будет включен в отфильтрованный массив; если значение по индексу Falseэлемент будет исключен из отфильтрованного массива.

Пример

Создание массива из элементов по индексам 0 и 2, 4:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
x = [True, False, True, False, True]
newarr = arr[x]
print(newarr)

Запуск примера

В предыдущем примере вернется [61, 63, 65]почему?

Потому что новый фильтр содержит только значения из массива фильтров True значений, поэтому в данном случае индексы 0 и 2, 4.

создания массива фильтров

В предыдущем примере мы создаем массив фильтров для True и False Значение硬编码,но обычно используется для создания массива фильтров на основе условий.

Пример

Создайте фильтрующий массив, который возвращает только значения, превышающие 62:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
# Создайте пустой список
filter_arr = []
# Пройдемся по каждому элементу в arr
for element in arr:
  # Если элемент больше 62, то значение устанавливается в True, в противном случае в False:
  if element > 62:
    filter_arr.append(True)
  else:
    filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Запуск примера

Пример

Создайте фильтрующий массив, который возвращает только четные элементы исходного массива:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
# Создайте пустой список
filter_arr = []
# Пройдемся по каждому элементу в arr
for element in arr:
  # Если элемент можно делить на 2 без остатка, установите значение в True, в противном случае установите False
  if element % 2 == 0:
    filter_arr.append(True)
  else:
    filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Запуск примера

Прямое создание фильтрующего массива

Этот пример является очень распространенной задачей в NumPy, и NumPy предоставляет отличные методы для решения этой проблемы.

Мы можем заменить массив в условиях вместо переменной iterable, и он будет работать так, как мы ожидаем.

Пример

Создайте фильтрующий массив, который возвращает только значения, превышающие 62:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
filter_arr = arr > 62
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Запуск примера

Пример

Создайте фильтрующий массив, который возвращает только четные элементы исходного массива:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
filter_arr = arr % 2 == 0
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Запуск примера