def GaussianMatrix(X,sigma):     row,col=X.shape     GassMatrix=np.zeros(shape=(row,row))     X=np.asarray(X)     i=0     for v_i in X:         j=0         for v_j in X:             GassMatrix[i,j]=Gaussian(v_i.T,v_j.T,sigma)             j+=1         i+=1     return GassMatrix def Gaussian(x,z,sigma):     return np.exp((-(np.linalg.norm(x-z)**2))/(2*sigma**2))   This is my current way. Is there any way I can use matrix operation to do this? X is the data points.
I myself used the accepted answer for my image processing, but I find it (and the other answers) too dependent on other modules. Therefore, here is my compact solution:
import numpy as np     def gkern(l=5, sig=1.):     """\     creates gaussian kernel with side length `l` and a sigma of `sig`     """     ax = np.linspace(-(l - 1) / 2., (l - 1) / 2., l)     gauss = np.exp(-0.5 * np.square(ax) / np.square(sig))     kernel = np.outer(gauss, gauss)     return kernel / np.sum(kernel)  Edit: Changed arange to linspace to handle even side lengths
Edit: Use separability for faster computation, thank you Yves Daoust.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With