今回もpythonについての記事です。
pythonで関数を定義することもあると思いますが、
その関数の定義でちょっとアドバンス的な使い方を習得したので、
ここでご紹介します。
関数の引数に関数を持たせることによるメリットなんかも
ご紹介していこうと思います。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
↓↓↓↓これまでのPythonの記事についてはこちら↓↓↓↓
まずはpythonの関数を用意する。
さて、まずはpythonで関数を用意するところからスタートです。
はっきりいってどんな関数でもいいですが、
基本的に関数と言ったら、引数を用いることがほとんどだと思いますから、
今回は、このような計算式を関数化してみることにします。
x2+5
2次関数ですね。
これを関数化すると、このようになりますね?
def f0(x):
return x**2+5
関数名はf0としています。
また、2乗するところですが、
pythonでは**2となりますので注意して下さい。
^2とかやると怒られます。
pythonの関数で、引数に関数を持つものを作る。
次に、本題ですが、
引数に関数を持つ関数を用意しましょう。
今回は、微分する関数を用意しました。
いわゆる中心差分を使った数値微分ですね。
def fBibun(f,x):
h=1e-4
return ((f(y+h)-f(y-h))/(2*h))
関数の名前はfBibunとしました。
微分なのでBibunですね。ちょっと安易です。
この関数の引数の【f】
に注目してください。
よく見ると、ただの数値が入っていないことに注意です。
通常よく使う引数というものは、
ただの変数として使いますよね?
fBibun関数でいうところの、【x】がそれにあたります。
fは最初から関数として引数にいれる前提ですので、
このfBibun関数のように、f(x+h)や
f(x-h)なんて記述が可能なんです。
実際に引数に関数を持つ関数を使ってみる。
それでは、実際にやってみましょう。
テストしたいだけなので、printするだけにします。
また、具体的な数値を入れないと計算できませんから、
xにはテキトーに5という数字をいれてみます。
def f0(x):
return x**2+5
def fBibun(f,y):
h=1e-4
return ((f(y+h)-f(y-h))/(2*h))
print(fBibun(f0,5))
こんな感じですね。
さて、計算結果は、
9.999999999976694
こんな感じになりました。
ちょっと手計算して値のチェックをしてみましょう。
x2+5をxで微分すると、
2xですね。
今回、yとして入れている値は5
その5がxにも入りますから、
答えとしては2*x=2*5
ということで、10となります。
計算結果としてはほぼ10となっていますので、
正しく計算できているということがわかりますね。
引数に関数を持つ関数を使用するメリット
さて、関数の微分を例にして話を進めてきましたが、
理解できましたでしょうか??
ここまで理解できれば、なんとなくメリットもわかってくるかと思います。
それが、
【いろんな関数で試したいときにラクできる】
これですね。
今回の例では、
x2+5をxで微分する。という例でしたが、
違う関数を微分したいとき、いちいちmain上、もしくは
微分している関数(具体的にはfBibun関数)を
直接いじるのはあまり効率的とは言えないですよね?
ただ、関数を引数として使えることがわかっていないと、
そのようにするしかありません。
なので、メリットの理解に加えて、
積極的にこの仕組みを使っていったほうがいいことがわかります。
今回のまとめ
私自身、引数に使えるもの(つかってきたもの)といえば、
せいぜい、intやstring、その配列、あとはクラスくらい
なものでした。
実際のところ、書籍で微分する関数を目にするまで、
やろうとも思ったことがなかったですが、
機械学習なんかやる人には当たり前に使う技術のようです。
ぜひあなたもこの技術を使ってみてください!!!
コメント