2017-03-02 54 views
1

下面的代碼被寫在八度編程語言乙狀結腸python中,可以採取標量,矢量或矩陣

g =1./(1+e.^-(z) 

它計算S形函數,並且可以採取標量,矢量或矩陣。例如 如果我把上述成函數S形(Z),其中z = 0,則結​​果將是:

result=sigmoid(0) 

其結果將是標量(0.5) 如果傳遞一個矢量說Z = [0.2,0.4,0.1],它會輸出結果作爲矢量: -

result=sigmoid(z) 

結果是一個矢量:

0.54983 0.59869 0.52498 

如果z是像

一個矩陣
z=[ 0.2 0.4; 0.5 0.7; 0.9 .004] 

result = sigmoid(z) 

結果=

0.54983 0.59869 
    0.62246 0.66819 
    0.71095 0.50100 

現在我該如何在Python中實現類似的方法?我試了下面的代碼,

g=1./ (1 + math.exp(-z)) 

但它只適用於標量。不適用於矢量和矩陣。我究竟做錯了什麼。 對不起,我以前的問題不是很清楚。我重新編輯它。

+0

也許我不太清楚,我想更多的東西加入到一個單句。 – sunny

+0

我重新編輯了我的問題。感謝您指出。 – sunny

回答

2

numpy模塊包含在許多Python發行版中,並且易於添加到其他模塊中,具有陣列功能。這裏是如何用numpy在Python中完成你想要的。請注意,在numpy中定義數組有點不同於Octave,但sigmoid表達式幾乎完全相同。

from numpy import array, exp 

z = array([ 0.2, 0.4, 0.1]) 
print('z = \n', z) 
g = 1/(1 + exp(-z)) 
print('g =\n', g) 

print() 

z = array([[0.2, 0.4], [0.5, 0.7], [0.9, .004]]) 
print('z = \n', z) 
g = 1/(1 + exp(-z)) 
print('g =\n', g) 

代碼(在IPython中運行)的結果是:

z = 
[ 0.2 0.4 0.1] 
g = 
[ 0.549834 0.59868766 0.52497919] 

z = 
[[ 0.2 0.4 ] 
[ 0.5 0.7 ] 
[ 0.9 0.004]] 
g = 
[[ 0.549834 0.59868766] 
[ 0.62245933 0.66818777] 
[ 0.7109495 0.501  ]] 
+0

太棒了!這真的起作用了。我應該知道numpy支持所有必需的數學函數,例如log,e。 – sunny