Я построил обернутое двумерное гауссово распределение в Python, используя приведенное здесь уравнение: http://www.aos.wisc.edu/~dvimont/aos575/Handouts/bivariate_notes.pdf Однако я не понимаю, почему мое распределение не дает в сумме 1, несмотря на включение константы нормализации.
Для решетки U x U
import numpy as np
from math import *
U = 60
m = np.arange(U)
i = m.reshape(U,1)
j = m.reshape(1,U)
sigma = 0.1
ii = np.minimum(i, U-i)
jj = np.minimum(j, U-j)
norm_constant = 1/(2*pi*sigma**2)
xmu = (ii-0)/sigma; ymu = (jj-0)/sigma
rhs = np.exp(-.5 * (xmu**2 + ymu**2))
ker = norm_constant * rhs
>> ker.sum() # area of each grid is 1
15.915494309189533
Я уверен, что в том, как я думаю об этом, в корне отсутствует, и подозреваю, что требуется какая-то дополнительная нормализация, хотя я не могу об этом рассуждать.
ОБНОВИТЬ:
Благодаря проницательным предложениям других, я переписал свой код, чтобы применить нормализацию L1 к ядру. Однако оказывается, что в контексте двумерной свертки с помощью БПФ сохранение диапазона в виде [0, U] все же может дать убедительный результат:
U = 100
Ukern = np.copy(U)
#Ukern = 15
m = np.arange(U)
i = m.reshape(U,1)
j = m.reshape(1,U)
sigma = 2.
ii = np.minimum(i, Ukern-i)
jj = np.minimum(j, Ukern-j)
xmu = (ii-0)/sigma; ymu = (jj-0)/sigma
ker = np.exp(-.5 * (xmu**2 + ymu**2))
ker /= np.abs(ker).sum()
''' Point Density '''
ido = np.random.randint(U, size=(10,2)).astype(np.int)
og = np.zeros((U,U))
np.add.at(og, (ido[:,0], ido[:,1]), 1)
''' Convolution via FFT and inverse-FFT '''
v1 = np.fft.fft2(ker)
v2 = np.fft.fft2(og)
v0 = np.fft.ifft2(v2*v1)
dd = np.abs(v0)
plt.plot(ido[:,1], ido[:,0], 'ko', alpha=.3)
plt.imshow(dd, origin='origin')
plt.show()
С другой стороны, определение размера ядра с помощью закомментированной строки дает неправильный график:
np.minimum(i, U-i)
. Чего вы там пытаетесь добиться? - person Praveen   schedule 11.01.2016