'Populating an Array in a loop not working

I am dumbfounded right now, I have some code that works generating an array of data and operating on it.

I am trying to sample random sections from my code, in order to check the calculations I am doing.

I have done this before and it has worked fine. I

target_sample =[1,2,10,25,83,62]
df, s_array_track ,z_array_track = MonteCarloValuationAntithetic(df,target_sample)
#df,z,s_array,lookback_scenario = MonteCarloValuation(df)

target_sample =[1,2,10,25,83,62]

lookback = []
    
for i in range(n_samples):
    s = df["current_index"][i]
    s_max = df["max_index"][i]
    t = df["time to maturity_Months"][i]
    sigma = df["volatility"][i]
    cap = df["cap_rate"][i]
    r = df["interest_rate"][i] 
    z = np.zeros((int(index_crediting_term*12)+1,n_scenarios))
    s_array_track=np.zeros((len(target_sample),int(index_crediting_term*12)+1,n_scenarios))
    z_array_track = np.zeros((len(target_sample),int(index_crediting_term*12)+1,n_scenarios))
    df_track = df
        
    s_start = df['initial_index'][i]
    s_array = np.zeros((int(index_crediting_term*12)+1,n_scenarios))
    for k in range(int(n_scenarios/2)):
        for j in range(int(t)+1):
            drift =( r - .5 *(sigma**2)) * (1/12)
            z[j][k] = np.random.normal(0, 1)
            diffusion = sigma* z[j][k] * (np.sqrt(1/12))
            if j == 0:
                s_array[j][k] = s
            if (0 < j) and (j < t):
                s_array[j][k] =  s_array[j-1][k]*np.exp(drift + diffusion)                   
            if j==t: 
                s_array[j][k] = s_max
            else:
                continue
          
    for k in range(int(n_scenarios/2),int(n_scenarios)):
        for j in range(int(t)+1):
            drift =( r - .5 *(sigma**2)) * (1/12)
            z[j][k] = -z[j][int(k-n_scenarios/2)]
            diffusion = sigma* z[j][k] * (np.sqrt(1/12))
            if j == 0:
                s_array[j][k] = s
            if (0 < j) and (j < t):
                s_array[j][k] =  s_array[j-1][k]*np.exp(drift + diffusion)                   
            if j == t: 
                s_array[j][k] = s_max
            else: 
                continue
           
    if i in target_sample:
        print(str(i) + " is in Target")
        h = target_sample.index(i)
        print(str(h))
        s_array_track[h] = s_array
        z_array_track[h] = z
            
    lookback_temp = max(0,np.mean(np.clip(np.max(((s_array[:][:] / s_start)-1) ,axis =0 ),None,cap)))) 

    lookback.append(lookback_temp)
    
            
df["Lookback"] = lookback
   

I am not getting the results I am expecting. When I do

s_array_track[h] = s_array

Outside of the code it works as expected. What is going on in my loop? I have spent hours on this and I am really confused as to why its not working.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source