Картографы, Редукторы, Фильтры
Я знаю о карте / уменьшить алгоритм и его использование. Он использует функции, которые называются Mappers и Reducers, но я также нахожу, что люди используют слово Filters.
Являются ли фильтры такими же, как Mappers или есть какая-то существенная разница?
4 ответа
Фильтр подобен карте, для которой переданная функция всегда является "характеристической функцией", то есть функцией, которая возвращает либо "да", либо "нет" на вопрос "это здесь относится?"
Другими словами, представьте, что множество определено как {x | x ∈ X и P(x) }. Фильтр принимает базовый набор, проверяет, является ли P(x) истинным, и возвращает только те элементы, для которых он истинен.
Так что { х | x - натуральное число, и нечетное (x)} - {1,3,5,7...}.
Карта применяет произвольную функцию, поэтому вы можете думать об этом как о наборе типа {y | x ∈ X и y = f (x) }.
Так что { у | x - натуральное число, а y = x² } - {1,4,9,16,...}.
Фильтр определяет, должен ли элемент быть сохранен или удален. Картограф просто переводит значение в другое. Как следствие: выходной набор операции карты всегда равен по размеру входному набору. Выходные данные для операции фильтрации меньше, чем входной набор.
Фильтр принимает "список" и функцию, применяет функцию к каждому члену списка и возвращает новый список, содержащий только те элементы, для которых приложение функции вернуло значение true. Например:
l = [1,2,3,4]
l = filter(lambda x: x < 3, l)
print l # [1,2]
Map делает то же самое, но возвращает список, содержащий результаты применения функции:
l = [1,2,3,4]
l = map(lambda x: x < 3, l)
print l # [True,True,False,False]
Обычно функции карты принимают входной набор и функцию и возвращают набор, содержащий выходные данные функции для каждого входного элемента. Фильтр принимает входной набор и логическую функцию и возвращает набор, содержащий входные значения, для которых функция возвращает true.