Массив фильтров NumPy
Фильтрация массивов
Извлечение некоторых элементов из существующего массива и создание из них нового массива называется фильтрацией .
В NumPy вы фильтруете массив, используя список логических индексов .
Список логических индексов — это список логических значений, соответствующих индексам в массиве.
Если значение по индексу равно True
тому, что элемент содержится в отфильтрованном массиве, если значение по этому индексу равно
False
тому, что элемент исключается из отфильтрованного массива.
Пример
Создайте массив из элементов по индексу 0 и 2:
import numpy as np
arr = np.array([41, 42, 43, 44])
x = [True,
False, True, False]
newarr = arr[x]
print(newarr)
Вернется приведенный выше пример [41, 43]
, почему?
Потому что новый фильтр содержит только те значения, где массив фильтров имел значение
True
, в данном случае индекс 0 и 2.
Создание массива фильтров
В приведенном выше примере мы жестко закодировали значения True
и False
, но обычно их используют для создания массива фильтров на основе условий.
Пример
Создайте массив фильтров, который будет возвращать только значения выше 42:
import numpy as np
arr = np.array([41, 42, 43, 44])
#
Create an empty list
filter_arr = []
# go through each element in
arr
for element in arr:
# if the element is higher than 42, set
the value to True, otherwise False:
if element > 42:
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])
#
Create an empty list
filter_arr = []
# go through each element in
arr
for element in arr:
# if the element is completely divisble
by 2, set the value to True, otherwise 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 предоставляет хороший способ ее решения.
Мы можем напрямую подставить массив вместо итерируемой переменной в наше условие, и оно будет работать именно так, как мы ожидаем.
Пример
Создайте массив фильтров, который будет возвращать только значения выше 42:
import numpy as np
arr = np.array([41, 42, 43, 44])
filter_arr = arr
> 42
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)