Эта статья в основном знакомит с пониманием свертки в Python. В статье приведены подробные примеры кода, которые имеют хорошую справочную ценность. Надеюсь, она будет полезна всем.
функция свертки
python
Предусмотрено множество схем свертки. Напротив, функция свертки, определенная в, немного сложнее, чем свертка ndimage
в numpy
и в функции. Это видно только по количеству входных параметров.signal
1 2 3 4 5 |
|
Первые две — это одномерные функции свертки, и ndimage может выполнять операции свертки над многомерными массивами вдоль одной оси координат, а последние две — это многомерные свертки.
Функция свертки в numpy и signal имеет три режима, которые используются для настройки характеристик края после свертки.Если размеры двух входных объектов свертки равны NNN и MMM, выходные данные этих трех режимов.Результат:
full
: выходная размерность N + M - 1 N+M-1N+M- 1. Сигналы в последней точке вообще не перекрываются, поэтому краевой эффект очевиден.same
: Выходной размер max ( M , N ) \max(M,N)max(M,N), краевые эффекты все еще видныvalid
: Выходное измерение ∣ M − N ∣ |MN|∣M−N∣, возвращает только полностью перекрывающиеся области, что эквивалентно исключению всех точек с краевыми эффектами.
ndimage
Ввиду convolve
краевого эффекта изображение расширяется, и это mode
определяет формат заполнения после расширения.Если фильтруемый массив равен a b c d
, то в разных режимах край заполняется следующим образом
левое дополнение | данные | правое дополнение | |
---|---|---|---|
reflect |
dcba | abcd | dcba |
constant |
хкккк | abcd | хкккк |
nearest |
аааа | abcd | дддд |
mirror |
dcb | abcd | ЦБА |
wrap |
abcd | abcd | abcd |
Среди них он задается k
через параметры cval
.
Эти пять методов изменения границ scipy.ndimage
очень распространены в функциях, особенно в функциях фильтра, включающих свертку, которые являются стандартными.
сравнительный тест
Затем для этих различных функций свертки проведите тест производительности. Используйте шаблон свертки 5 × 5 для выполнения вычислений свертки на матрице 1000 × 1000, чтобы увидеть, насколько быстро происходит свертка в различных реализациях.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Для сравнения, ndimage
свертка в явно более эффективна.
接下来测试一下一维卷积的表现
1 2 3 4 5 6 7 8 9 10 11 |
|
相比之下,convolve1d
不愧是写明了1d
的卷积函数,速度最快,而numpy
中提供的函数速度最慢。