ラムダ式と関数ハンドル(無名関数)
ニューロンって入力に何らかの重み係数を与えたものを足し合わせて、それを活性化関数(シグモイド関数)で処理します。
ですが、三角関数みたいにsin、cosってコマンドが用意されていません。Matlabの場合は無名関数(関数ハンドル)があるんですがPythonは似たようなのにラムダ式ってのがあるので簡単にまとめました。
結論いえばMatlabは@、Pythonの場合はlambdaと記述した後に引数と計算式を書けばいいだけです。
Matlabの場合
xrange=[-5:0.1:5]
pre=@(w1,w2,b,x1,x2) w1*x1+w2*x2+b %ニューロンの入力処理
sigmoid=@(x) 1./(1+exp(-x)) %シグモイド関数
plot(sigmoid(xrange)) %シグモイド関数のプロット
neuron=sigmoid(pre(1,1,1,1,1)) %ニューロンの計算
Pythonの場合
import numpy as np
import matplotlib.pyplot as plt
xrange = np.arange(-5,5,0.1) #xの範囲
pre = lambda w1,w2,b,x1,x2:w1*x1+w2*x2+b #ニューロンの入力処理
sigmoid=lambda x:1/(1+np.exp(-x)) #%シグモイド関数
plt.plot(xrange,sigmoid(xrange))
plt.show()
neuron=sigmoid(pre(1,1,1,1,1)) #ニューロン
print(neuron)
プログラム内で同じ数式を何度も記述あるいはその前の処理結果を代入、もしくは例えば2次方程式の解の様に似たような式だけれども1か所だけ符号が違う、係数が違うって時は便利かも。
それ以外はPythonには三項演算子って1行の処理内にif文を含ませてコードを簡単にできますが、Matlabにはないみたい。