sigmoid in python that can take scalar, vector or matrix

20,710

Solution 1

The numpy module, included in many Python distributions and easy to add to others, has array capabilities. Here is how to do what you want in Python with numpy. Note that defining an array in numpy is a bit different than in Octave, but the sigmoid expression is almost exactly the same.

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)

The results of that code (running in IPython) are:

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     ]]

Solution 2

Alternatively, you can use the vectorized Sigmoid function expit that is available in scipy:

from scipy.special import expit
from numpy import array

z = array([ 0.2, 0.4, 0.1])
g = expit(z)
Share:
20,710
sunny
Author by

sunny

Updated on July 09, 2022

Comments

  • sunny
    sunny almost 2 years

    The following code is written in Octave Programming language

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

    It computes a sigmoid function and can take scalar, vector or Matrix. For example if I put the above into a function sigmoid(z), where z=0, the result will be:

    result=sigmoid(0)
    

    The result will be scalar ( 0.5) if the pass a vector say z= [ 0.2, 0.4, 0.1], it would output a vector for result as:-

     result=sigmoid(z)
    

    result is a vector:

     0.54983   0.59869   0.52498
    

    if z is a matrix like

     z=[ 0.2 0.4; 0.5 0.7; 0.9 .004]
    
    result = sigmoid(z)
    

    the result is =

      0.54983   0.59869
      0.62246   0.66819
      0.71095   0.50100
    

    Now how do I implement a similar method in Python?. I tried the below code,

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

    But it works only for scalar. Not for vector and Matrix. what am I doing wrong. sorry my question before was not very clear. I am re-edited it.

  • sunny
    sunny over 7 years
    Awesome ! this really worked. I should have known that numpy supports all the required math function such as log, e .