Редактировать [январь 2019]
@ Комментарий Ташуса ниже верен, и, таким образом, @ ответ dudemeister , таким образом, вероятно, более заметен. Предложенная им функция также более эффективна, поскольку позволяет избежать прямой двумерной свертки и количества операций, которые могут повлечь за собой.
Возможная проблема
Я полагаю, что вы делаете два 1d свертки, первое для столбцов и второе для строк, и заменяете результаты первого на результаты второго.
Обратите внимание, что numpy.convolve
с аргументом 'same'
возвращает массив, равный по величине предоставленному наибольшему, поэтому при первом свертывании вы уже заполнили весь массив data
.
Одним из хороших способов визуализации ваших массивов на этих этапах является использование диаграмм Хинтона , чтобы вы могли проверить, какие элементы уже имеют значение.
Возможное решение
Вы можете попытаться добавить результаты двух сверток (используйте data[:,c] += ..
вместо data[:,c] =
во втором цикле for
), если ваша матрица свертки является результатом использования одномерных H_r
и H_c
таких матриц как:
Еще один способ сделать это - использовать scipy.signal.convolve2d
с 2-мерным свёрточным массивом, что, пожалуй, то, что вы хотели сделать в первую очередь.