English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Фильтрация массива из существующего массива и создание нового массива на его основе называется фильтрацией (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]