2016-06-22 4 views
1

Хотя я уже нашел документацию по функции scipy.ndimage.convolve, и я «практически знаю, что она делает», когда я пытаюсь вычислить результирующие массивы, я не могу следовать математической формуле , Возьмем, к примеру:Математика за scipy.ndimage.convolve

a = np.array([[1, 2, 0, 0],` 
      [5, 3, 0, 4], 
      [0, 0, 0, 7], 
      [9, 3, 0, 0]]) 

k = np.array([[1,1,1],[1,1,0],[1,0,0]]) 

from scipy import ndimage 

ndimage.convolve(a, k, mode='constant', cval=0.0) 

# Why is the result like this ? 

array([[11, 10, 7, 4], 
     [10, 3, 11, 11], 
     [15, 12, 14, 7], 
     [12, 3, 7, 0]]) 

Буду признателен за шаг расчета.

Заранее благодарен!

ответ

0

Просто, чтобы разогреть рассмотреть

к = np.array ([[1,0,0], [0,1,0], [0,0,0]])

вместо вашего к, то если вы

ndimage.convolve (а, к, режим = 'константа', CVAL = 0,0)

вы получите

array([[4, 2, 4, 0], 
     [5, 3, 7, 4], 
     [3, 0, 0, 7], 
     [9, 3, 0, 0]]) 

и обратите внимание, что любой элемент это сумма его собственной позиции (из-за 2-го 1 в k), а вторая ниже и вправо (из-за 1-го 1 в k), то есть 4 в верхнем углу от оригинала 1 в верхнем углу плюс 3 по диагонали от него.

(возможно) запутанная часть состоит в том, что эффект k противоположно тому, что вы ожидаете, то есть для k выше вы можете ожидать, что первый 1 добавит значение выше и влево, а не вниз и направо.

Теперь вернемся к вашей: 12 (3 вниз и 2 поперек) представляет собой сумму 9 + 3 + 0 + 0 + 0 + 0.

Обратите внимание, что что-либо вне матрицы считается 0.

+0

Я очень благодарен вашим объяснениям. Наконец, я понимаю, как эти значения были рассчитаны / –

Смежные вопросы