Python函数平稳运行两次,然后陷入无限循环

时间:2019-03-15 19:41:59

标签: python function

我看了很多其他问题,但找不到我需要的东西,因此对不起,这很抱歉。

我正在通过Jupyter Notebook使用python 2.7,并且已经创建了一个函数来遍历我的数据以消除明显的尖峰(使这些位置变为NaN)。该函数可以很好地工作两次(图形正是我想要的,因为它们似乎无关紧要,所以未在此处包括它们),但是随后它卡住了,不会递增计数器或执行除打印用于检查的变量之外的任何操作我的代码中发生了什么。在运行本节之前,我还必须清除所有内核并重新运行所有先前的单元,否则它会卡在第一次迭代中。

我需要在脚本中单独使用此功能8次,目前暂时无法使用。我对Python相当陌生,所以我希望有一个显而易见的修复程序,我只是看不到。

以下是函数:

def testCR(Acr,binscr,errincr,lamcr,mcr):
    LengthOut = int(np.ceil((lamcr[-1]-lamcr[0])/binscr))
    print('len(Acr)=',len(Acr))
    SpecTestcr = Acr
    LamTestcr = lamcr
    ErrTestcr = errincr
    k = 1
    i = 0
    j = 0
    while i <= len(Acr)-1:
        while lamcr[j] <= lamcr[0]+(k*binscr) and lamcr[j] <= lamcr[-1]:
            j += 1
            if j >= len(lamcr):
                break
        print('j=',j)
        testcr = Acr[i:j-1]
        dcr = np.abs(testcr - np.median(testcr))
        mdevcr = np.median(dcr)
        scr = np.divide(dcr,mdevcr) if mdevcr else [0] * len(dcr)
        print('len testcr=',len(testcr))
        print('mdevcr=',mdevcr)
        for q in range(len(testcr)):
            if scr[q] >= mcr:
                SpecTestcr[i+q] = np.nan
                ErrTestcr[i+q] = np.nan
                LamTestcr[i+q] = np.nan
        i = j
        k += 1
        if (i >= len(Acr)-1) or (j >= len(Acr)-1):
            break
    return SpecTestcr, LamTestcr, ErrTestcr

这是调用它后返回的方式:

#Start of Call 1
('len(Acr)=', 2030)
('j=', 166)
('len testcr=', 165)
('mdevcr=', 0.014701925686341571)
('j=', 332)
('len testcr=', 165)
('mdevcr=', 0.01341256599231086)
# lots out outputs that are redundant
#Start of Call 2
('len(Acr)=', 2030)
('j=', 166)
('len testcr=', 165)
('mdevcr=', 0.016135353935591987)
# deleted many outputs here
('j=', 2030)
('len testcr=', 41)
('mdevcr=', 0.039457538527604724)
#Start of Call 3
('len(Acr)=', 2030)
('j=', 166)
('len testcr=', 165)
('mdevcr=', 0.014498302694355033)
('j=', 166)
('len testcr=', 0)
('mdevcr=', nan)
('j=', 166)
('len testcr=', 0)
('mdevcr=', nan)
('j=', 166)
('len testcr=', 0)
('mdevcr=', nan)

最后几行会一直重复,除非我停止代码。

任何帮助将不胜感激!预先感谢您的宝贵时间!

编辑:

作为参考,这是我在3个不同时间的称呼方式:

B0crtest,lam0crtest,Err0crtest=testCR(A0,Bins,A0err,A0oL,2)
B45crtest,lam45crtest,Err45crtest=testCR(A45,Bins,A45err,A45oL,2)
B225crtest,lam225crtest,Err225crtest=testCR(A225,Bins,A225err,A225oL,2)

不同的数字(0 45和225(22.5))仅是数据采集的不同半波板角度。

要查看该函数的功能(正确运行时),请将第一张图(下面)变成第二张图。

Graph before function

Graph after function

0 个答案:

没有答案