如何在numpy中有效计算高斯核矩阵?

2023-11-22

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))

这是我目前的方式。有什么方法可以使用矩阵运算来做到这一点吗? X 是数据点。


我自己使用了接受的答案进行图像处理,但我发现它(和其他答案)太依赖于其他模块。因此,这是我的紧凑解决方案:

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)

编辑:将 arange 更改为 linspace 以处理偶数边长

编辑:使用可分离性来加快计算速度,谢谢伊夫·道斯特.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在numpy中有效计算高斯核矩阵? 的相关文章

随机推荐