python中的sigmoid,可以采用标量,向量或矩阵

sun*_*nny 7 math python-3.x sigmoid

以下代码是用Octave编程语言编写的

g =1./(1+e.^-(z)
Run Code Online (Sandbox Code Playgroud)

它计算sigmoid函数,可以采用标量,向量或矩阵.例如,如果我将上面的函数放入函数sigmoid(z),其中z = 0,结果将是:

result=sigmoid(0)
Run Code Online (Sandbox Code Playgroud)

如果传递一个向量说z = [0.2,0.4,0.1],结果将是标量(0.5),它将输出结果的向量: -

 result=sigmoid(z)
Run Code Online (Sandbox Code Playgroud)

结果是一个向量:

 0.54983   0.59869   0.52498
Run Code Online (Sandbox Code Playgroud)

如果z是一个像矩阵

 z=[ 0.2 0.4; 0.5 0.7; 0.9 .004]

result = sigmoid(z)
Run Code Online (Sandbox Code Playgroud)

结果是=

  0.54983   0.59869
  0.62246   0.66819
  0.71095   0.50100
Run Code Online (Sandbox Code Playgroud)

现在我如何在Python中实现类似的方法?我试过下面的代码,

g=1./ (1 + math.exp(-z))
Run Code Online (Sandbox Code Playgroud)

但它仅适用于标量.不适用于矢量和矩阵.我究竟做错了什么.对不起我以前的问题不太清楚.我被重新编辑了.

Ror*_*ton 9

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)
Run Code Online (Sandbox Code Playgroud)

该代码的结果(在I​​Python中运行)是:

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     ]]
Run Code Online (Sandbox Code Playgroud)