2016-03-27 20 views
0

Kodlama ve örnek boyutu, n, A/B testinde hesaplamak için bir program yazmaya çalışıyorum.İç içe döngü ile dizi satır ekle

Yuvalanmış döngüde aşağıdaki ana işlevde sıkıştım. İç içe döngü kullanan farklı beta değerlerine bağlı olarak n değerlerini içeren 3 farklı satır içeren bir dizi n_dist_all oluşturmak istiyorum. Ancak, işlev sadece aynı satırda üç farklı beta için değer ekler. numpy.hstack kullanmayı deniyorum. Ayrıca concatenate ve append'u denedim ama hepsi aynı sonucu veriyorlar.

import numpy as np 
import math 
import scipy.stats as st 

def N(alpha, beta, delta): 
    Z_alpha = st.norm.ppf(1-alpha) 
    Z_beta = st.norm.ppf(1-alpha) 
    pA = 0.01 
    pB = pA + delta 
    qA = 1.0 - pA 
    qB = 1.0 - qA 

    n = (((Z_alpha*math.sqrt((pA+pB)*(qA+qB)/float(2)))+(Z_beta*math.sqrt((pA*qA)*(pB*qB))))/(pA-pB))**float(2) 
    return int(n) 


def float_range(start, stop, step): 
    i = start 
    while i < (stop + step): 
     yield i 
     i += step 


def main(): 
    n_dist_all = np.array([]) 

    beta_1 = 0.2 
    beta_2 = 0.1 
    beta_3 = 0.05 
    beta_group = [beta_1, beta_2, beta_3] 

    alpha = 0.05 

    for beta in beta_group: 
     n_dist = np.array([]) 
     for delta in float_range(0.001,0.03,0.0005): 
      n_dist = np.append(n_dist, N(alpha, beta, delta)) 
     n_dist_all = np.hstack((n_dist_all, n_dist)) 
     n_dist = [] 
    print n_dist_all 

if __name__ == "__main__": 
     main() 

cevap

0

Python programınızdan hstack() işlevini vstack() olarak değiştirin. Aşağıdaki örnek.

a = np.array([1,2,3]) 
b = np.array([4,5,6]) 
c = np.array([7,8,9]) 
np.vstack((a,b,c)) # This give the following array 

array([[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9]]) 
+0

Teşekkür ederim Sung. vstack her değeri farklı sıraya koyuyordu ve kodumdaki vstack ile ufak bir değişiklik meselemi çözmüş olurdu. Ancak şimdi bunun yerine liste listesini kullandım ve çözümü aldım. – Usman

İlgili konular