Я написал код Python для выполнения некоторых работ по обработке изображений, но для запуска требуется огромное количество времени. Я потратил последние несколько часов, пытаясь его оптимизировать, но я думаю, что дошел до конца своих способностей.Любой способ ускорить этот код Python?
Глядя на выходы из профилировщика, функция ниже занимает большую часть общего времени моего кода. Есть ли способ ускорить его?
def make_ellipse(x, x0, y, y0, theta, a, b):
c = np.cos(theta)
s = np.sin(theta)
a2 = a**2
b2 = b**2
xnew = x - x0
ynew = y - y0
ellipse = (xnew * c + ynew * s)**2/a2 + (xnew * s - ynew * c)**2/b2 <= 1
return ellipse
Чтобы дать контекст, он вызывается с x
и y
в качестве выхода из np.meshgrid
с достаточно большим размером сетки, а все остальные параметры, как простых целочисленных значений.
Хотя эта функция, по-видимому, занимает много времени, возможно, есть способы ускорить и остальную часть кода. Я оставил код в this gist.
Любые идеи были бы с благодарностью получены. Я пробовал использовать numba и autojit
основных функций, но это мало помогает.
Я тестирую производительность этой программы, и у меня хорошая производительность ... 1.37 с изображением 4000x4000. Параметры: x = linspace (0,1,4000); X, Y = meshgrid (х, х); make_ellipse (Х, 0, Y, 0,1,1,1). Вы уверены, что это самый медленный? – Pablo
Вы можете использовать 'np.ogrid' или' np.meshgrid (..., sparse = True) ', чтобы создать разреженную ортогональную сетку для ваших входных кодов' x' и 'y'. Это экономит память и дает небольшое увеличение производительности в 'make_ellipse'. –