mercredi 11 septembre 2019

Select a number randomly with probability proportional to its magnitude from the given array of n elements

Ex 1: A = [0 5 27 6 13 28 100 45 10 79] let f(x) denote the number of times x getting selected in 100 experiments. f(100) > f(79) > f(45) > f(28) > f(27) > f(13) > f(10) > f(6) > f(5) > f(0)

My code:

def pick_a_number_from_list(A,l):
    Sum = 0
    #l = len(A)
    for i in range(l):
        Sum+=A[i]
    A_dash = []
    for i in range(l):
        b=A[i]/Sum
        A_dash.append(b)
    #print(A_dash)
    series = pd.Series(A_dash)
    cumsum = series.cumsum(skipna=False)
    #print(cumsum[9])

    sample_value = uniform(0.0,1.0)
    r = sample_value
    print(r)
    #for i in range(l):
    if r<cumsum[1]:  
            return 1
    elif r>cumsum[1] and r <cumsum[2]:  
            return 2
    elif r<cumsum[3]: 
            return 3
    elif r<cumsum[4]: 
            return 4
    elif r<cumsum[5]: 
            return 5
    elif r<cumsum[6]:  
            return 6
    elif r<cumsum[7]: 
            return 7
    elif r<cumsum[8]: 
            return 8
    elif r<cumsum[9]:
            return 9


def sampling_based_on_magnitued():

    A = [0,5,27,6,13,28,100,45,10,79]
    n = len(A)
    #for i in range(1,10):
    num = pick_a_number_from_list(A,n)
    print(A[num])

sampling_based_on_magnitued()

In mu code i am using multiple if else statement and because it is hardcoded i can make by o/p right till 10 element in the list. I want to make my code dynamic for any value in the list.

Here in my code i have restricted it to n=10

Pls tell me how can i right generic code which can replace all if - elseif statement with for loop




Aucun commentaire:

Enregistrer un commentaire