Search code examples
pythonarraysnumpyvectormultiplication

Multiplying two arrays in python with different lenghts


I want to know if it's possible to solve this problem. I have this values:

yf = (0.23561643, 0.312328767,  0.3506849315, 0.3890410958,  0.4273972602,  0.84931506)
z = (4.10592285e-05,  0.0012005020, 0.00345332906,  0.006367483, 0.0089151571,  0.01109750, 0.01718827)

I want to use this function (Discount factor) but it's not going to work because of the different lenghts between z and yf.

def f(x): 
        res = 1/( 1 + x * yf)
        return res
f(z) 
output: ValueError: cannot evaluate a numeric op with unequal lengths

My question is that if it exists a way to solve this. The approximate output values are:

res = (0.99923, 0.99892, 0.99837, 0.99802, 0.99763, 0.99175)

Any help with this will be perfect and I want to thanks in advance to everyone who takes his/her time to read it or try to help.


Solution

  • Do you want array to broadcast to the whichever is the shorter? You can do this

    def f(x): 
        leng = min(len(x), len(yf))
        x = x[:leng]
        new_yf = yf[:leng] # Don't want to modify global variable.
        res = 1/( 1 + x * new_yf)
        return res
    

    and it should work.