首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在给定的模板上使用scipy.ndimage.convolve?

问如何在给定的模板上使用scipy.ndimage.convolve?
EN

Stack Overflow用户
提问于 2016-01-08 19:22:47
回答 1查看 230关注 0票数 1

我需要做一些与此post中详细介绍的内容非常相似的事情。但是模版的制作方式对我来说并不明显。_flux的模板是这样的,但是temp_bz和temp_bx的模板不是。

我认为有了变量,而不是数字,情况会变得更清楚(例如,如果递归关系是,则使用a=0.5, b=...作为stencil = np.array([[a, b], [c, d]])

代码语言:javascript
复制
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

代码将如何更改?

EN

回答 1

Stack Overflow用户

发布于 2016-01-08 19:46:52

有了flux2、bz和bx变量,并假设它们是numpy数组(如果它们不是,它们应该是numpy数组),您可以以向量化的形式编写该方程,如下所示:

代码语言:javascript
复制
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个图像(这将是相当大的夸张)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34675884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档