我需要做一些与此post中详细介绍的内容非常相似的事情。但是模版的制作方式对我来说并不明显。_flux的模板是这样的,但是temp_bz和temp_bx的模板不是。
我认为有了变量,而不是数字,情况会变得更清楚(例如,如果递归关系是,则使用a=0.5, b=...作为stencil = np.array([[a, b], [c, d]])
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代码将如何更改?
发布于 2016-01-08 19:46:52
有了flux2、bz和bx变量,并假设它们是numpy数组(如果它们不是,它们应该是numpy数组),您可以以向量化的形式编写该方程,如下所示:
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个交互,我认为以解析形式计算它要快得多,而不是用几乎全为0的模板卷积3个图像(这将是相当大的夸张)。
https://stackoverflow.com/questions/34675884
复制相似问题