lundi 29 octobre 2018

For loop if statement return undesired outcome at the first row

I have a code on python that tries to calculate the sample variance while I accumulate entries in each loop.

y_hat = y_df.loc[n-1]
var = []
var_sum = 0
for i in range(n):
    var_i = (g_i[i] - y_hat)**2
    var_sum += var_i
    if i == 0: 
        var_avg = var_sum
        var.append(var_avg)
    else: 
        var_avg = var_sum/i
        var.append(var_avg)

the output of the result yields very strange first rows (when i is 1), while the rest of rows are fine. Can someone help please? output of the code

Below is my entire script, essentially I am testing Monte Carlo simulation to evaluate pi.

import numpy as np
import math
import matplotlib.pyplot as plt
import random
import pandas as pd
import statistics as stats

n = 1000
k = 100

# generate u r.v. with size k*n -> (100,1000)
u = []
for i in range(k):
    u_i = np.random.uniform(size = n)
    u.append(u_i)

# put into dataframe (k*n)
u_df = pd.DataFrame(u)

# calculate g_i, g_i is a df with k*n
g_i = 4*np.sqrt(1-u_df**2)

g_sum = 0
y = []
for i in range(n):
    g_sum += g_i[i]
    y_i = g_sum/(i+1)
    y.append(y_i)

# put y into df -> n*k
y_df = pd.DataFrame(y)
y_df = y_df.reset_index(drop=True)

y_hat = y_df.loc[n-1]
var = []
var_sum = 0
for i in range(n):
    var_i = (g_i[i] - y_hat)**2
    var_sum += var_i
    if i == 0: 
        var_avg = var_sum
        var.append(var_avg)
    else: 
        var_avg = var_sum/i
        var.append(var_avg)

var_df = pd.DataFrame(var)
var_df = var_df.reset_index(drop=True)

var_df.head()

Aucun commentaire:

Enregistrer un commentaire