Я пытаюсь написать часть вложенных циклов в моем алгоритме и встретить некоторые проблемы, которые весь алгоритм занимает слишком много времени из-за этих вложенных циклов. Я довольно новичок в Python (как вы можете найти из моего нижепрофессионального кода :() и, надеюсь, кто-то может помочь мне ускорить мой код!Как ускорить вложенные циклы в Python
Весь алгоритм предназначен для обнаружения огня в нескольких массивах 1500 * 6400 Малый контекстный анализ применяется при просмотре всего массива. Контекстный анализ выполняется динамически назначенным способом размера окна. Размер окна может идти от 11 * 11 до 31 * 31 до тех пор, пока значения проверки в окнах выборки не будут достаточно следующий раунд расчета, например, как показано ниже:
def ContextualWindows (arrb4,arrb5,pfire):
####arrb4,arrb5,pfire are 31*31 sampling windows from large 1500*6400 numpy array
i=5
while i in range (5,16):
arrb4back=arrb4[15-i:16+i,15-i:16+i]
## only output the array data when it is 'large' enough
## to have enough good quality data to do calculation
if np.ma.count(arrb4back)>=min(10,0.25*i*i):
arrb5back=arrb5[15-i:16+i,15-i:16+i]
pfireback=pfire[15-i:16+i,15-i:16+i]
canfire=0
i=20
else:
i=i+1
###unknown pixel: background condition could not be characterized
if i!=20:
canfire=1
arrb5back=arrb5
pfireback=pfire
arrb4back=arrb4
return (arrb4back,arrb5back,pfireback,canfire)
Тогда это динамические окна будут кормить в следующий раунд испытаний, например:
b4backave=np.mean(arrb4Windows)
b4backdev=np.std(arrb4Windows)
if b4>b4backave+3.5*b4backdev:
firetest=True
Чтобы запустить весь код для нескольких массивов 1500 * 6400 numpy, потребовалось более получаса или даже больше. Просто интересно, есть ли у кого-нибудь идея, как с этим бороться? Общая идея, которую я должен приложить, была бы очень полезной!
Большое спасибо!
Может быть лучше для [codereview] (http://codereview.stackexchange.com/)? – hd1
не изменение сложности, но я бы использовал 'while 5 <= i <16' –
Вы также могли бы изменить его на цикл for и break, с предложением else i = 20, а затем изменить тест ... Есть нет вложенных циклов, просто много нарезки, numpy должно создавать представления, поэтому не должно быть так медленно. – AChampion