Thanks for the advice. Using Sebastian's advice I was able to write a version that worked when the input arguments are both arrays with the same length. The code provided by eat works when t is an array, but not for an array of far.
The numpy.vectorize version works with any combination of scalar or array input. I still haven't figured out how to rewrite my function to be as flexible as the numpy.vectorize version at accepting either scalars or array inputs and properly broadcasting the scalar arguments to the array arguments. David Parker Chromalloy - TDAG From: eat <e.antero.ta...@gmail.com> To: Discussion of Numerical Python <numpy-discussion@scipy.org> Date: 01/31/2011 11:37 AM Subject: Re: [Numpy-discussion] Vectorize or rewrite function to work with array inputs? Sent by: numpy-discussion-boun...@scipy.org Hi, On Mon, Jan 31, 2011 at 5:15 PM, <dpar...@chromalloy.com> wrote: I have several functions like the example below that I would like to make compatible with array inputs. The problem is the conditional statements give a ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all(). I can use numpy.vectorize, but if possible I'd prefer to rewrite the function. Does anyone have any advice the best way to modify the code to accept array inputs? Thanks in advance for any assistance. If I understod your question correctly, then air_gamma could be coded as: def air_gamma_0(t, far=0.0): """ Specific heat ratio (gamma) of Air/JP8 t - static temperature, Rankine [far] - fuel air ratio [- defaults to 0.0 (dry air)] air_gamma - specific heat ratio """ if far< 0.: return NAN elif far < 0.005: ag= air_gamma_1(t) ag[np.logical_or(t< 379., t> 4731.)]= NAN return ag elif far< 0.069: ag= air_gamma_2(t, far) ag[np.logical_or(t< 699., t> 4731.)]= NAN return ag else: return NAN Rest of the code is in the attachment. My two cents, eat NAN = float('nan') def air_gamma(t, far=0.0): """ Specific heat ratio (gamma) of Air/JP8 t - static temperature, Rankine [far] - fuel air ratio [- defaults to 0.0 (dry air)] air_gamma - specific heat ratio """ if far < 0.: return NAN elif far < 0.005: if t < 379. or t > 4731.: return NAN else: air_gamma = -3.472487e-22 * t ** 6. + 6.218811e-18 * t ** 5. - 4.428098e-14 * t ** 4. + 1.569889e-10 * t ** 3. - 0.0000002753524 * t ** 2. + 0.0001684666 * t + 1.368652 elif far < 0.069: if t < 699. or t > 4731.: return NAN else: a6 = 4.114808e-20 * far ** 3. - 1.644588e-20 * far ** 2. + 3.103507e-21 * far - 3.391308e-22 a5 = -6.819015e-16 * far ** 3. + 2.773945e-16 * far ** 2. - 5.469399e-17 * far + 6.058125e-18 a4 = 4.684637e-12 * far ** 3. - 1.887227e-12 * far ** 2. + 3.865306e-13 * far - 4.302534e-14 a3 = -0.00000001700602 * far ** 3. + 0.000000006593809 * far ** 2. - 0.000000001392629 * far + 1.520583e-10 a2 = 0.00003431136 * far ** 3. - 0.00001248285 * far ** 2. + 0.000002688007 * far - 0.0000002651616 a1 = -0.03792449 * far ** 3. + 0.01261025 * far ** 2. - 0.002676877 * far + 0.0001580424 a0 = 13.65379 * far ** 3. - 3.311225 * far ** 2. + 0.3573201 * far + 1.372714 air_gamma = a6 * t ** 6. + a5 * t ** 5. + a4 * t ** 4. + a3 * t ** 3. + a2 * t ** 2. + a1 * t + a0 elif far >= 0.069: return NAN else: return NAN return air_gamma David Parker Chromalloy - TDAG _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion [attachment "air_gamma.py" deleted by Dave Parker/Chromalloy] _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion