I am doing some optimizations on random samples. In a small number of
cases, the objective is not well-defined for a given sample (it's not
possible to tell beforehand and hopefully won't happen much in
practice). What is the most numpythonic way to handle this? It
doesn't look like I can use np.seterrcall in this case (without
ignoring its actual intent). Here's a toy example of the method I
have come up with.
import numpy as np
def reset_seterr(d):
"""
Helper function to reset FP error-handling to user's original settings
"""
for action in [i+'='+"'"+d[i]+"'" for i in d]:
exec(action)
np.seterr(over=over, divide=divide, invalid=invalid, under=under)
def log_random_sample(X):
"""
Toy example to catch a FP error, re-sample, and return objective
"""
d = np.seterr() # get original values to reset
np.seterr('raise') # set to raise on fp error in order to catch
try:
ret = np.log(X)
reset_seterr(d)
return ret
except:
lb,ub = -1,1 # includes bad domain to test recursion
X = np.random.uniform(lb,ub)
reset_seterr(d)
return log_random_sample(X)
lb,ub = 0,0
orig_setting = np.seterr()
X = np.random.uniform(lb,ub)
log_random_sample(X)
assert(orig_setting == np.seterr())
This seems to work, but I'm not sure it's as transparent as it could
be. If it is, then maybe it will be useful to others.
Skipper
_______________________________________________
NumPy-Discussion mailing list
[email protected]
http://mail.scipy.org/mailman/listinfo/numpy-discussion