Я знаю, что для выполнения 2D-сверток доступны различные оптимизированные стандартные функции, но просто для понимания я пытаюсь реализовать свою собственную функцию 2D-свертки.
На данный момент я сделал следующее:
convoluted = []
# TODO: Vectorize
for i in range(0, M - m + 1):
for j in range(0, N - n + 1):
submatrix = x[i:i+m, j:j+n]
convoluted.append(np.sum([submatrix*kernel]))
convoluted = np.array(convoluted).reshape(M - m + 1, N - n + 1)
Обратите внимание, что x
- это массив входного изображения, (M, N)
- это форма входного изображения, а (m, n)
это форма используемого ядра.
2 явных цикла for довольно медленные.
Есть ли способ векторизовать это? Любая помощь приветствуется
(я знаю, что понимание списка python можно использовать, по крайней мере, для внутреннего l oop, но я ищу более быстрый метод, если таковой имеется)