当我对大量数据进行仿真时,为什么我的python代码冻结在中间运行?

时间:2019-02-10 02:56:42

标签: python-3.x

我试图运行此代码来获取图形。在func(paper)下的while循环中,当我将tim> 6设置为“ tim”时,它运行良好。但是,对于较大的“ tim”(即tim> 10),代码会冻结在中间。我将print函数保留在循环的中间,以检查代码是否正在运行,并查看其是否完全冻结。

import matplotlib.pyplot as plt
import math
import random
from scipy.special import erfinv

def func(paper):
    tlist = []
    lamda = paper[1]
    exval = 2
    while exval>=2:
        tim = paper[0] + math.exp(math.sqrt(2)*erfinv(2 
          (math.log(exval)/lamda-float(1/2))))
        exval = exval + 1
        if tim>10:
            break
        tlist.append(tim)
    print('t')
    llist = []
    for i in range(len(tlist)):
        rand_num = random.random()
        lamda1 = -math.log(rand_num)*(2-(i+1)/(math.exp(lamda)-1))
        llist.append(lamda1)
    print('len')    
    newlist = []
    for n in range(0,len(tlist)):
        newlist.append([tlist[n],llist[n],lamda])

    return newlist

Tree = []
paper = [0,2]
newone = func(paper)
Tree.append(paper)
Tree.extend(newone)

print(Tree)

currentlayer = newone
while True:
    print('a')
    newlayer = []
    for n in range(len(currentlayer)):
        print('1')
        paper = currentlayer[n]
        call = func(paper)
        newlayer.extend(call)
        print('2')
    if len(newlayer)==0:
        break

    Tree.extend(newlayer)
    print(len(Tree))
    currentlayer = newlayer


xlist = []
for n in range(len(Tree)):
    xlist.append(Tree[n][0])
y = sorted(xlist)
number = []
for n in range(1,1+len(y)):
    number.append(n)

plt.plot(y,number,'blue')
plt.yscale('log')
plt.show()
plt.xlabel('Time')
plt.ylabel('Number of papers')

0 个答案:

没有答案