Python Numpy:卷积、代码优化

Python Numpy:卷积、代码优化,python,numpy,optimization,Python,Numpy,Optimization,在我目前正在开发的python代码中,有一个特定的函数确实需要速度优化。 首先,我想关注纯python代码(没有C或Cython实现)。 该函数生成一系列高斯曲线,其σ随x轴位置而变化。它有三个论点: x0,1d numpy数组,高斯曲线的中心值 h,一维numpy阵列,高斯曲线的高度 x,1d numpy数组,用于定义总和的值 我的目标是以最快的方式获得所有曲线的总和(这是一种与高斯曲线的卷积,具有位置相关的sigma) 目前我的代码是: sigs = get_sigmas(x0) # fu

在我目前正在开发的python代码中,有一个特定的函数确实需要速度优化。 首先,我想关注纯python代码(没有C或Cython实现)。 该函数生成一系列高斯曲线,其σ随x轴位置而变化。它有三个论点:

  • x0,1d numpy数组,高斯曲线的中心值
  • h,一维numpy阵列,高斯曲线的高度
  • x,1d numpy数组,用于定义总和的值
  • 我的目标是以最快的方式获得所有曲线的总和(这是一种与高斯曲线的卷积,具有位置相关的sigma)

    目前我的代码是:

    sigs = get_sigmas(x0)  # function that returns the value of sigma at each position
    
    all_gauss_args = -0.5*np.power((x[:, np.newaxis] - x0[np.newaxis, :]) /
                     sigs[np.newaxis, :], 2.0)
    
    sum = (1.0/(np.sqrt(2 * np.pi) * sigs[np.newaxis, :])) * np.exp(all_gauss_arg) *\
                 h[np.newaxis, :]
    
    sum = np.sum(sum, axis=1)
    return sum
    
    有可能使它更快吗


    提前感谢您的帮助

    尝试内联
    np.power((x[:,np.newaxis]-x0[np.newaxis,:])/sigs[np.newaxis,:],2.0)
    ,也就是说,与其执行
    np.power(x,2)
    write
    x*x
    ,它应该运行得更快。谢谢您的建议!我仍然远远没有达到我想要达到的速度,但是由于对代码的修改,我的速度有了轻微的提高。我放弃使用Cython或C++的想法,以便有一个显著的速度提升(即使,据我所知,NUMPY已经使用了很多Cython……我不知道我能得到多少更好)。