python - Python 中的偏导数

标签 python numpy derivative

我正在慢慢地从 C 转向 Python。这次我需要根据给定的网格以数值方式计算偏导数。我知道如何在 C 中做到这一点,所以目前我只使用内联适配器,即

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 计算偏导数?如果有人能提供任何帮助,我将不胜感激。

最佳答案

np.diff可能是执行此操作的最惯用的 numpy 方法:

y = np.empty_like(x)
y[:-1] = np.diff(x, axis=0) / dx
y[-1] = -x[-1] / dx

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

关于python - Python 中的偏导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24886277/

相关文章:

python - mac pip安装mysql-python不成功

python - 如何在 Python/Numpy 中向量化一个简单的 for 循环

python - 使用numpy.any匹配opencv中的颜色会产生奇怪的结果

python - 为什么我的 Sympy 代码会错误地计算一阶泰勒级数近似值?

python - 理解 numpy.gradient

python - 为什么f(x)对 'x'的导数是 'x'而不是pytorch中的1?

python - 自动将 matplotlib basemap 置于数据中心

python - 当用户输入字符串而不是整数时如何保护我的 python 代码?

python - Pandas 根据其他两列的划分创建新列

numpy - 将输入转换为 julia 中的数组