はじめに
lambda関数(ラムダ式)、また無名関数と呼ばれています。
名前の通り、名前の無い関数です(笑)。
前編と前前編のleaky ReLUとReLUグラフを作成した時に、
list(map(lambda x: relu(x), X))
このようなコードがあります。今回はそれについて話したいと思います。
lambda関数
lambda parameter(s): expression
- parameter(s): パラメーターが複数であれば、"","" で区切りします。
- expression: 計算式です。
例:
tashisan = lambda x, y: x + y
print(tashisan(2, 4))
"""
結果:
6
"""
lambda関数+map関数
map(lambda parameter: expression, iterable)
反復可能なオブジェクトの各要素に、特定の計算式を適用します。
- iterable: 反復可能なオブジェクトです(listとか)。
- parameter: 反復可能なオブジェクトの各要素です。
- expression: 各要素に適用する計算式です。
例えば、学生の成績を全員に20点追加しようとするなら
student_scores = [20, 30, 40, 50]
score_up = map(lambda score: score + 20, student_scores)
print(score_up)
# <map object at 0x7f868734dd90>
score_upの戻り値はメモリのアドレスです。
listの戻り値が欲しかったら、
list(map(lambda xxx))
で書く必要があります。
もう一度試すと
print(list(score_up))
"""
結果:
[40, 50, 60, 70]
"""
ReLUグラフ作成時のコード
import numpy as np
# 反復可能なオブジェクト
X = np.linspace(-10, 10, 100)
# 計算式
def relu(x) :
return max(x, 0)
list(map(lambda x: relu(x), X))
説明:
-10~10の間の100個数値をそれぞれReLUに適用させて、
戻り値をlistに格納します。
更新: コメントのご指摘により、
list(map(lambda x: relu(x), X))
は
list(map(relu, X))
また
[(relu(x) for x in X)]
に書けばいいです。
lambda関数 v.s 普通の関数(function)
最後に、lambda関数と普通の関数を軽く比較します。
lambda | function | |
---|---|---|
名前 | 必要ない | 必要 (def fun_name: ) |
計算式 | 一行のみ | 複数行可能 |
戻り値 | 自動的に戻る |
return というキーワード必要 |
以上、簡単にまとめました。