Я посмотрел на многие другие вопросы, но не смог найти то, что мне было нужно, поэтому извините, если это повторение.
Я использую Python 2.7 через Jupyter Notebook, и я сделал функцию дляпросмотрите мои данные, чтобы избавиться от очевидных ужасных всплесков (делая эти местоположения 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)
Различные номера (045 и 225 (22,5)) - это просто разные полуволновые углы пластин, с которыми были взяты данные.
Чтобы увидеть, что делает функция (когда она работает правильно), поверните первый график (ниже) всекунда.
График после функции
График после функции