【发布时间】:2016-08-10 08:11:43
【问题描述】:
我的大部分计算时间都花在scipy.ndimage.filters.laplace()
scipy 和numpy 的主要优点是C/C++ 中的矢量化计算,包装在python 中。
scipy.ndimage.filters.laplace() 派生自 _nd_image.correlate1d,即
部分优化库nd_image.h
有没有更快的方法在 10-100 大小的数组中执行此操作?
定义 拉普拉斯滤波器 - 忽略除法
a[i-1] - 2*a[i] + a[i+1]-
可选 可以理想地环绕边界
a[n-1] - 2*a[n-1] + a[0]为n=a.shape[0]
【问题讨论】:
-
" 是纯
python" - 你确定吗?对我来说,它看起来只是一些 c++ 函数的包装,在 python 代码中花费的时间可能可以忽略不计。 -
我刚刚意识到你是完全正确的
_nd_image.correlate1d是nd_image.h的一部分,在这种情况下我会稍微修改一下问题 -
对于解决上述定义的显式方法,有一个很好的概述,其中 fortran 与 f2py 是最佳的不同语言:scipy.github.io/old-wiki/pages/PerformancePython。也许可能需要一种更快的方法来解决拉普拉斯算子,我认为像多重网格方法这样的方法将是最先进的,例如您可以使用github.com/pyamg/pyamg 并将 RHS 设置为零吗?或者也许过滤器/卷积是限制步骤,所以这是不值得的。
-
见下文 - 我已经找到了解决方案,而无需重新编码任何内容 - 您的方法对于大型数组来说是理想的,但对于
10-100长度数组python会妨碍