numpy.random.choice () не работает правильно - PullRequest
0 голосов
/ 25 сентября 2018

Это часть моего кода:

def generateInstruction(Seed, Probability):

    random.seed(Seed)
    random.seed()

    NumberOfAddresses = random.randint(10, 40) 
    ListOfAdresses = list()
    Operations = [1,0]
    Probabilities = [Probability, 1-Probability]


    Var = random.randint(0, NumberOfAddresses)
    if Var not in ListOfAdresses:
        Op=0 
        Instruction =  str(Op) + "\t" + str(Var )+ "\n" 
        ListOfAdresses.append(Var)

    else:
        Op = numpy.random.choice(Operations, 1, True, Probabilities)
        Instruction = str(Op) + "\t" + str(Var )+ "\n"
    return Instruction

Эта функция предназначена для генерации инструкции из 2 частей: операции op и переменной var, если переменная появляется дляв первый раз операция должна быть равна 0 .В противном случае это может быть либо 0 , либо 1 в соответствии с определенной вероятностью того, что я пройду через командную строку.

Позже в основном я вызываю эту функцию в цикле, а переменные хранятся в списке listOfAdresses для проверки.Проблема в выводе, моя последовательность все с операциями, которые равны 0, хотя некоторые переменные появляются более одного раза, это заставляет меня задаться вопросом о else части функции, но я не вижу, что с ней не так.Любые замечания?

Это код, где я его называю:

def main():

    random.seed(2)
    K = random.randint(200, 2000) 
    print(K)
    P=list()
    if (len(sys.argv) > 2) :
        for i in range(2, len(sys.argv)):
            P.append(float(sys.argv[i]))

        f= open('Trace.txt' , 'w+')
        Seed = float(sys.argv[1])
        for j in range(0 , len(sys.argv)-2) : 
            Probability = P[j]# there something with this index
            for Iteration in range(K*j, K*(j+1)):
                Instr = generateInstruction(Seed, Probability)
                f.write(Instr)
        #f.close()
    else:
        print('Params Error')

Последовательность делится на сегменты, каждый сегмент имеет различную вероятность на входе.Все вероятности передаются в командной строке.

1 Ответ

0 голосов
/ 25 сентября 2018

Ветвь else вашего кода никогда не выполняется.Это потому, что вы не ведете записи предыдущих значений в ListOfAdresses.Вместо этого каждый раз, когда вызывается функция, вы повторно инициализируете ListOfAdresses в пустой список.

Это означает, что:

if Var not in ListOfAdresses:

Всегда True и, следовательно, вы никогда не вызываетеnumpy.random.choice()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...