numpy.random.choice()无法正常运行

时间:2018-09-25 09:37:45

标签: python numpy

这是我的代码的一部分:

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

此函数旨在生成由两部分组成的指令:操作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 :(得分:0)

您的代码的else分支永远不会执行。这是因为您没有维护ListOfAdresses中先前值的任何记录。相反,每次调用该函数时,您都会将ListOfAdresses重新初始化为一个空列表。

这意味着:

if Var not in ListOfAdresses:

始终为True,因此,您实际上从未致电numpy.random.choice()