Найти - Пользователи
Полная версия: Ускорение кода numpy
Начало » Python для экспертов » Ускорение кода numpy
1
SergioX13
Данный код добавляет шум Гаусса на фото.
Возникла проблема со скоростью: фото fhd обрабатывается около 0,45 секунд. Для моих задач это непозволительно. Необходимо достичь скорости хотя бы единиц миллисекунд.

 import numpy as np
import cv2
image = cv2.imread('1.jpg')
row,col,ch= image.shape
mean = 0
var = 0.1
sigma = var**0.5
gauss = np.random.normal(mean,sigma,(row,col,ch))
gauss = gauss.reshape(row,col,ch)
noisy = image + gauss
cv2.imwrite('2.jpg', noisy)


Уже оптимизировал самую медленную часть кода(генерацию массива рандомных чисел)(данная операция занимает окооло 0,32с):
 gauss = np.random.normal(mean,sigma,(row,col,ch))
gauss = gauss.reshape(row,col,ch

Уменьшил матрицу в сто раз, а потом размножил в сто раз:
 roww=int(row/100)
b = timeit.default_timer()
gauss = np.random.normal(mean,sigma,(roww,col,ch))
gauss = gauss.reshape(roww*col*ch)
gauss = np.tile(gauss, 100)
gauss = gauss.reshape(row,col,ch)
Код выше выполняется 20мс, из которых больше всего времени занимает размножение одной матрицы в большую(18мс):
 gauss = np.tile(gauss, 100)
Как можно было бы сделать данную операцию быстрее?

А теперь к основной проблеме: весь этот код по-прежнему выполняется очень долго(170мс),самые времязатратные операции:

Сложение матриц занимает 30мс.
 noisy=image+gauss

Открытие(35мс) и сохранение(90мс) фото:
 image = cv2.imread("1.jpg"
 cv2.imwrite('2.jpg', noisy)

Можно ли эти операции как-либо ускорить на python?
Спасибо!


Полный код:
 import numpy as np
import cv2
image = cv2.imread('1.jpg')
row,col,ch= image.shape
mean = 0
var = 0.1
sigma = 10
roww=int(row/100)
gauss = np.random.normal(mean,sigma,(roww,col,ch))
gauss = gauss.reshape(roww*col*ch)
gauss = np.tile(gauss, 100)
gauss = gauss.reshape(row,col,ch)
noisy=image+gauss
cv2.imwrite('2.jpg', noisy)
PEHDOM
SergioX13
SergioX13
вот сильно сомневаюсь что вам еще удасться чтото сильно выжать, cpython сам по себе сравнительно медленный, иногда чтобы чтот укорить нужно вопсользваться альтернативами типа numba или pypy, в определенных случая можно добиться увеличение быстродейсвия от 10 раз и более. Это если не рассматривать вынос части функционала на более низкоуровенвые языки.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB