[Numpy-discussion] Vectorize or rewrite function to work with array inputs?

DParker at chromalloy.com DParker at chromalloy.com
Mon Jan 31 10:15:59 EST 2011


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.


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20110131/0bec51bf/attachment.html>


More information about the NumPy-Discussion mailing list