English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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

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

Фильтрация массива из существующего массива и создание нового массива на его основе называется фильтрацией (filtering).

В 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]

Пример выше вернет [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)

Результат выполнения:

[False, False, True, True, True]
[63 64 65]

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

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)

Результат выполнения:

[Ложь, Истина, Ложь, Истина, Ложь, Истина, Ложь]
[2 4 6]

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

Этот пример является очень распространённой задачей в 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)

Результат выполнения:

[Ложь      Ложь      Истина      Истина      Истина]
[63 64 65]

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

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)

Результат выполнения:

[Ложь      Истина      Ложь      Истина      Ложь      Истина      Ложь]
[2 4 6]