【问题标题】:numpy: Different results between diff and gradient for finite differencesnumpy:有限差分的差异和梯度之间的不同结果
【发布时间】:2019-09-10 11:10:03
【问题描述】:

我想计算两个数组ab的数值导数。

如果我这样做了

c = diff(a) / diff(b)

我得到了我想要的,但我失去了优势(最后一点)所以c.shape ~= a.shape

如果我这样做

c = gradient(a, b)

然后c.shape = a.shape,但我得到了完全不同的结果。

我已经阅读了如何在 numpy 中计算梯度,我猜它做了完全不同的事情,尽管我还不太了解其中的区别。但是有没有一种方法或另一个函数来计算也给出边缘值的微分?

为什么gradientdiff 之间的结果如此不同?

【问题讨论】:

    标签: numpy numpy-ndarray


    【解决方案1】:

    这些函数虽然相关,但执行不同的操作。

    np.diff 只取沿给定轴的矩阵切片的差异,并用于n-th 差异返回沿给定轴小于n 的矩阵(您在n=1 案例中观察到的) .请看:https://docs.scipy.org/doc/numpy/reference/generated/numpy.diff.html

    np.gradient 在保持其形状的同时沿其所有维度生成一组数组的梯度https://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html 另请注意,应为一个输入数组执行np.gradient,您的第二个参数b 没有意义这里(被解释为来自*varargs 的第一个非关键字参数,用于描述第一个参数的值之间的间距),因此结果与您的直觉不符。

    如果您确实需要 c.shape 匹配 a.shape,我会简单地使用 c = diff(a) / diff(b) 并将值附加到 c。例如,如果您希望渐变在窗口边缘附近消失,则可以添加零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      相关资源
      最近更新 更多