Самый быстрый способ создания 2D гауссов
Я пытаюсь сгенерировать асимметричный 2D гауссиан с dim 7x7, но я хочу сделать это как можно быстрее. Я пробовал 4 разных способа:
x=np.arange(7)[None].astype(np.float); y=x.T
xx,yy=np.meshgrid(x,y)
mx,my,sx,sy=3.0,4.0,1.0,2.0 #centre and width params
gauss=np.exp(-(xx-mx)**2/sx-(yy-my)**2/sy) #full grid
gauss=np.exp(-(x-mx)**2/sx-(y-my)**2/sy) #x and y vectors
gauss=np.exp(-(y-my)**2/sy)*(np.exp(-(x-mx)**2/sx)) #multiplication
gauss=np.exp(-(y-my)**2/sy).dot(np.exp(-(x-mx)**2/sx)) #dot product
Тесты на моем компьютере с%timeit:
#full grid: 13.4 us
#x,y vectors: 16.5 us
#multiplication: 17.7 us
#dot prod: 16.5
Я удивлен, что самый быстрый подход - тот, который использует полную сетку. Кроме того, создание этой полной сетки не является проблемой, так как она будет многократно использоваться для многих вычислений. Есть ли более быстрый способ вычислить gauss
?