我需要做一些与此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}}
如何更改代码?
答案 0 :(得分:1)
拥有flux2
,bz
和bx
变量,并假设它们是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个模板的图像(这将是相当多的过度杀伤)。