如何使用scipy.ndimage.convolve用于给定的模板?

时间:2016-01-08 11:22:47

标签: numpy scipy convolution

我需要做一些与此post中详述的内容非常相似的内容。但模板的制作方式对我来说并不明显...... _flux的模板是temp_bz的模板,而temp_bx和模板的模板是stencil = np.array([[a, b], [c, d]])的模板。 a=0.5, b=...不是。

我认为图片会变得更清晰,而不是数字(类似于flux2[i,j] = a*flux2[i-1,j] + b*bz[i-1,j]*dx + c*flux2[i,j-1] - d*bx[i,j-1]*dz 600 IN TXT "v=spf1 a include:_spf.google.com ~all" 例如,如果递归关系是

{{1}}

如何更改代码?

1 个答案:

答案 0 :(得分:1)

拥有flux2bzbx变量,并假设它们是numpy数组(如果它们不是,它们应该),你可以用矢量化形式写下这个ecuation,如下所示:

flux2[1:,1:] = a * flux2[:-1,1:] + b * bz[:-1,1:] * dx + c * flux2[1:,:-1] - d * bx[1:,:-1] * dz

请注意,由于您没有提及dz,我认为它是一个常数,如果它是与flux2形状相同的矩阵,则替换为dz[1:, 1:] (同样适用于dx)。

上面的那一行会将操作向量化为矩阵的每个i,j,从而删除for循环,从而获得相当大的加速。

您必须为行和列0定义边界条件,因为您的等式并未定义在这些特殊情况下要执行的操作。

所以,简而言之,因为你的模板只为每个变量使用一个位置,并且只有4个交互,我想说以分析形式计算它是更快,而不是卷积3几乎所有0个模板的图像(这将是相当多的过度杀伤)。