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

标签 python numpy

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 以处理偶数边长

编辑:使用可分离性加快计算,谢谢 Yves Daoust .

关于python - 如何在numpy中有效地计算高斯核矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731726/

相关文章:

python - 如何解决 Django AllAuth - 'Connection aborted.' , error(13, 'Permission denied' ) 错误?

python - 如何有效地检查 numpy 数组包含给定范围内的项目?

python - 可读性和效率,哪个更好? Numpy、元组等?

python - 如何处理巨大的 numpy 数组的计算以避免内存分配错误?

python - 如何在不换行的情况下打印完整的 NumPy 数组(在 Jupyter Notebook 中)

python - 您如何使用经过训练的神经网络来识别图像中的多个对象?

python - os.path.exists 使用整数

python - 如何在实时系统声音中识别声音 ‘peak’?

python - python中无替换的Word Ladder

python - 使用 numpy 样式格式的 Sphinx 忽略的部分