首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的偏导数

Python中的偏导数
EN

Stack Overflow用户
提问于 2014-07-22 11:33:41
回答 4查看 27.6K关注 0票数 5

我正在慢慢地从C迁移到Python。这一次,我需要从给定的网格中数值计算偏导数。我知道如何用C语言来实现,所以现在我只使用内联适配器,即

代码语言:javascript
复制
def dz(x,X,Y,Z,dx):
    y = numpy.zeros((X,Y,Z), dtype='double');
    code = """
            int i, j, k;
            for (i=0; i<X-1; i++){
                for(k=0; k<Y; k++){
                    for (j=0; j<Z; j++){
                        y[i,k,j] = (x[i+1, k, j] - x[i, k, j])/dx;
                        }
                    }
                }
            for (j=0; j<Z; j++){
                for(k=0; k<Y; k++){
                    y[X-1,k,j] = - x[X-1, k, j]/dx;
                    }
                }
        """
    weave.inline(code, ['x', 'y', 'dx', 'X', 'Y', 'Z'], \
                type_converters=converters.blitz, compiler = 'gcc');
    return y;

如您所见,xy是3D numpy数组,第二个循环代表边界条件。当然,我可以在纯Python中实现相同的逻辑,但是代码效率很低。但是,我想知道,是否可以用纯numpy来计算偏导数?我很感激任何人能提供的任何帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-07-22 12:22:04

np.diff可能是实现这一目标的最惯用的方法:

代码语言:javascript
复制
y = np.empty_like(x)
y[:-1] = np.diff(x, axis=0) / dx
y[-1] = -x[-1] / dx

您也可能对np.gradient感兴趣,尽管该函数对输入数组的所有维度都采用梯度,而不是单个维度。

票数 8
EN

Stack Overflow用户

发布于 2014-07-22 12:07:35

如果您使用的是numpy,这应该与上面的代码相同:

代码语言:javascript
复制
y = np.empty_like(x)
y[:-1] = (x[1:] - x[:-1]) / dx
y[-1] = -x[-1] / dx

要在第二个轴上获得相同的结果,您可以这样做:

代码语言:javascript
复制
y = np.empty_like(x)
y[:, :-1] = (x[:, 1:] - x[:, :-1]) / dx
y[:, -1] = -x[:, -1] / dx
票数 2
EN

Stack Overflow用户

发布于 2014-07-22 12:07:46

代码语言:javascript
复制
def dz(x,dx):
    y = numpy.zeros(x.shape, dtype='double')
    y[:-1] = (x[1:] - x[:-1]) / dx
    y[-1]  = -x[-1] / dx
    return y
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24886277

复制
相关文章

相似问题

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