Plop
Plop

Reputation: 35

RuntimeWarning: invalid value encountered in log

I become this expression: RuntimeWarning: invalid value encountered in log

while trying this:

def fct(a, b, c, d):
    global u1
    global u2
    if np.all(c > 0) and np.all(a > 0) and np.all(u1 != 0) and np.all(u2 != 0):
        return a, c, u1, u2

    u1, u2 = np.log(0.6*c), (math.e**d)**0.5
    F = np.log(a**2) + 6*[math.e**(-b)]/u1 + 3/u2
    print( F )

any idea??

Upvotes: 3

Views: 13700

Answers (2)

John Bonfardeci
John Bonfardeci

Reputation: 476

This can be overcome by a simple function to check for values equal to zero with:

    def safe_log(col_data):
        return list(map(lambda x: 0 if x == 0 else math.log(x), col_data.values))

where col_data is a Pandas dataframe column. For example:

ln_numbers = safe_log(df['my_column'])

Upvotes: 0

Geeocode
Geeocode

Reputation: 5797

This error message can emerge at two expression your code contains:

np.log(0.6*c) and np.log(a**2)

in the for loop with:

np.random.normal()

you will get random numbers at this distribution, whose values will be negative numbers.

That's why np.log(0.6*c will drop up the error message:

RuntimeWarning: invalid value encountered in log

And as Christoph noted below perfectly we have to be prepared for any 0, because both np.log(0.6*0) and np.log(0**2) will result in an error message too.

Example:

np.random.normal(10,4,100)

Out:

array([ 8.04664247, 14.4991884 , 10.89789303, 13.37593183,  3.29981902,
       16.6316143 , 10.64138342,  4.0459445 , 10.49192082, -3.04538967!!!!!,
       13.30443781,  4.13345961, 12.06508196, 10.4286879 ,  7.39431349,
       12.36789249,  9.20424736, 11.13161087, 12.15404482, 12.69897663,
        9.43633904, 12.77818913,  9.02926639,  4.78638573, 13.13104605,
       12.71197993,  6.1550897 ,  7.18496505,  4.3160573 ,  9.12631992,
        8.52408627, 12.45941119,  5.34780934,  5.7023213 , 13.53096085,
       12.1087058 ,  3.65110834,  5.15466232,  8.78768562, 12.54764999,
       15.12211713,  3.26481809,  9.8623701 , 15.88784306,  5.83355467,
        5.32775214,  8.81188865, 13.21886467,  6.78984216,  8.67260897,
        7.06100605, 13.75314668, 15.56562533, 10.33916552,  7.72745465,
       11.27606127, 11.56813697,  7.03177164, 10.63155512, 11.67072579,
       11.70855769, 10.78372397,  5.11327436, 15.61581808,  9.53446815,
       11.21806808, 11.2235412 ,  7.68339223, 12.71484256,  9.99613038,
       13.51834424,  7.73615596,  8.75145457, 13.02222188,  6.76757021,
       13.03580839, 10.67504642, 15.36110384, 15.66816384, -0.0952157 !!!!!!!! ,
        2.23551198, 11.21584659,  4.37791786,  5.45895529, 15.44411348,
       14.7077441 , 14.52080519,  3.70418827,  5.03132122,  5.24810117,
       16.35309566,  7.08504246,  6.81224092, 14.69274684,  8.43257572,
       12.87468578,  7.01621364,  7.62879265,  7.14646032, 20.16254855])

Stepping into your function inside of np.log()

c = np.array([ 8.04664247, 14.4991884 , 10.89789303, 13.37593183,  3.29981902,
       16.6316143 , 10.64138342,  4.0459445 , 10.49192082, -3.04538967,
       13.30443781,  4.13345961, 12.06508196, 10.4286879 ,  7.39431349,
       12.36789249,  9.20424736, 11.13161087, 12.15404482, 12.69897663,
        9.43633904, 12.77818913,  9.02926639,  4.78638573, 13.13104605,
       12.71197993,  6.1550897 ,  7.18496505,  4.3160573 ,  9.12631992,
        8.52408627, 12.45941119,  5.34780934,  5.7023213 , 13.53096085,
       12.1087058 ,  3.65110834,  5.15466232,  8.78768562, 12.54764999,
       15.12211713,  3.26481809,  9.8623701 , 15.88784306,  5.83355467,
        5.32775214,  8.81188865, 13.21886467,  6.78984216,  8.67260897,
        7.06100605, 13.75314668, 15.56562533, 10.33916552,  7.72745465,
       11.27606127, 11.56813697,  7.03177164, 10.63155512, 11.67072579,
       11.70855769, 10.78372397,  5.11327436, 15.61581808,  9.53446815,
       11.21806808, 11.2235412 ,  7.68339223, 12.71484256,  9.99613038,
       13.51834424,  7.73615596,  8.75145457, 13.02222188,  6.76757021,
       13.03580839, 10.67504642, 15.36110384, 15.66816384, -0.0952157 ,
        2.23551198, 11.21584659,  4.37791786,  5.45895529, 15.44411348,
       14.7077441 , 14.52080519,  3.70418827,  5.03132122,  5.24810117,
       16.35309566,  7.08504246,  6.81224092, 14.69274684,  8.43257572,
       12.87468578,  7.01621364,  7.62879265,  7.14646032, 20.16254855])

print(np.log(0.6*c))

Out:

[1.5744293  2.16326705 1.87774385 2.08263134 0.683042   2.30047974
 1.85392487 0.8868894  1.83977989    nan!!!! 2.07727203 0.90828911
 1.97948987 1.83373484 1.48988563 2.00427818 1.70883942 1.89896326
 1.9868364  2.03069579 1.73374247 2.03691412 1.6896455  1.05494996
 2.06415373 2.03171923 1.30645371 1.46116503 0.9515167  1.70033691
 1.63207021 2.01165063 1.16586138 1.23004771 2.09415483 1.98309906
 0.78420515 1.12907599 1.66252576 2.01870777 2.20533276 0.67237842
 1.77790089 2.25472861 1.25280091 1.16210379 1.66527617 2.07081933
 1.40460207 1.64934404 1.44376192 2.11044202 2.23423935 1.82511354
 1.5339539  1.91185638 1.93742888 1.43961306 1.85300085 1.94625801
 1.94949438 1.86721233 1.12101435 2.23745876 1.74408784 1.90670008
 1.90718784 1.52823552 2.03194439 1.79137243 2.09322197 1.53507929
 1.6583943  2.05583165 1.40131649 2.05687444 1.85708328 2.22101297
 2.24080525   nan!!!!! 0.29364465 1.90650203 0.96574761 1.18643181
 2.2264023  2.17754854 2.16475684 0.79863852 1.10485699 1.14704071
 2.28359159 1.44716024 1.40789551 2.17652834 1.62127664 2.04443742
 1.43739808 1.52110397 1.45579155 2.49300123]
/untitled0.py:37: RuntimeWarning: invalid value encountered in log

Upvotes: 2

Related Questions