map /reducealghoritmとその使用法について知っています。マッパーとレデューサーと呼ばれる関数を使用していますが、フィルターという言葉を使用している人もいます。
フィルタはマッパーと同じですか、それとも大きな違いがありますか?
フィルタは、渡された関数が常に「特性関数」であるマップのようなものです。つまり、「これはここに属しますか?」という質問に対して「はい」または「いいえ」のいずれかを返す関数です。
言い換えれば、{x | x∈XおよびP(x) }。Filterは基本セットを取得し、 P(x)が真であるかどうかをテストし、真であるメンバーのみを返します。
だから{ x | xは自然数で、odd(x)}は{1,3,5,7...}です。
マップは任意の関数を適用するので、それを{y | x∈Xおよびy=f(x) }。
だから{ y | 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を返す入力値を含むセットを返します。