Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python: getting around division by zero

Tags:

I have a big data set of floating point numbers. I iterate through them and evaluate np.log(x) for each of them. I get

RuntimeWarning: divide by zero encountered in log 

I would like to get around this and return 0 if this error occurs.

I am thinking of defining a new function:

def safe_ln(x):     #returns: ln(x) but replaces -inf with 0     l = np.log(x)     #if l = -inf:     l = 0     return l 

Basically,I need a way of testing that the output is -inf but I don't know how to proceed. Thank you for your help!

like image 492
Julia Avatar asked Nov 21 '12 16:11

Julia


People also ask

How do you deal with division by zero in Python?

You can't divide by zero! If you don't specify an exception type on the except line, it will cheerfully catch all exceptions. This is generally a bad idea in production code, since it means your program will blissfully ignore unexpected errors as well as ones which the except block is actually prepared to handle.


1 Answers

You are using a np function, so I can safely guess that you are working on a numpy array? Then the most efficient way to do this is to use the where function instead of a for loop

myarray= np.random.randint(10,size=10) result = np.where(myarray>0, np.log(myarray), 0) 

otherwise you can simply use the log function and then patch the hole:

myarray= np.random.randint(10,size=10) result = np.log(myarray) result[result==-np.inf]=0 

The np.log function return correctly -inf when used on a value of 0, so are you sure that you want to return a 0? if somewhere you have to revert to the original value, you are going to experience some problem, changing zeros into ones...

like image 82
EnricoGiampieri Avatar answered Oct 16 '22 10:10

EnricoGiampieri