From: Todd M. <jm...@st...> - 2004-05-13 17:01:39
|
On Thu, 2004-05-13 at 12:34, Álvaro Tejero Cantero wrote: > > I think what you're seeing is this: > > > > where(condition, expression1, expression2) > > > > Even though condition is selecting parts of expression1 which are valid, > > expression1 is still fully evaluated. > > Is this behaviour what is intended, or do you consider it a shortcoming > of the implementation?. In theory avoiding unneeded evaluations of > expression1 is very desirable... This just falls out of Python function call semantics: parameters are evaluated before a function is called. It is a property of Python so I think we're stuck with it. Two things come to mind to get rid of the warnings: 1. Stuff the input arrays with values which avoid the warnings. condition = logical_and(RV<0,discr>0) discr[condition] = 1 VV[condition] = 1 newtimes = where(condition, (-RV-sqrt(discr))/VV, far_future) 2. Use the Error system to suppress the warnings: Error.pushMode(dividebyzero="ignore", invalid="ignore") newtimes = where(logical_and(RV<0,discr>0), (-RV-sqrt(discr))/VV, far_future) Error.popMode() Regards, Todd |