Home > Software design >  how to pass two arrays into a fuction
how to pass two arrays into a fuction

Time:03-01

I have a function that typically takes in constant args and calculates volatility. I want to pass in a vector of different C's and K's to get an array of volatilities each associated with C[i], K[i]

def vol_calc(S, T, C, K, r, q, sigma):

        
        d1 = (np.log(S / K)   (r - q   0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
     
        vega = (1 / np.sqrt(2 * np.pi)) *  np.exp(-q * T) * np.sqrt(T) * np.exp((-si.norm.cdf(d1, 0.0, 1.0) ** 2) * 0.5)
    
        tolerance = 0.000001
        x0 = sigma
        xnew  = x0
        xold = x0 - 1
        while abs(xnew - xold) > tolerance:
            xold = xnew
            xnew = (xnew - fx - C) / vega
        
        return abs(xnew)

but if I want to pass two arrays without turning into a nested loop, I thought I could just do:

def myfunction(S, T, r, q, sigma):
    for x in K,C:

return same size as K,C

but I can't get it to work

CodePudding user response:

How about this?

def vol_calc(S, T, C, K, r, q, sigma):
    
    import numpy as np
    output = np.zeros(len(C))
    
    for num, (c, k) in enumerate(zip(C, K)):

    
        d1 = (np.log(S / k)   (r - q   0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
     
        vega = (1 / np.sqrt(2 * np.pi)) *  np.exp(-q * T) * np.sqrt(T) * np.exp((-si.norm.cdf(d1, 0.0, 1.0) ** 2) * 0.5)
    
        tolerance = 0.000001
        x0 = sigma
        xnew  = x0
        xold = x0 - 1
        while abs(xnew - xold) > tolerance:
            xold = xnew
            xnew = (xnew - fx - c) / vega
            
            output[num] = abs(xnew)
        
    return output
  • Related