acb*_*acb 5 numpy numpy-ndarray
我想计算两个数组a和的数值导数b。
如果我做
c = diff(a) / diff(b)
Run Code Online (Sandbox Code Playgroud)
我得到了我想要的,但我失去了优势(最后一点)所以c.shape ~= a.shape。
如果我做
c = gradient(a, b)
Run Code Online (Sandbox Code Playgroud)
然后c.shape = a.shape,但我得到了完全不同的结果。
我已经读过 numpy 中梯度是如何计算的,我想它做了完全不同的事情,尽管我还不太明白其中的区别。但是有没有一种方法或另一种函数来计算微分,同时给出边缘处的值?
为什么gradient和 之间的结果如此不同diff?
这些函数虽然相关,但执行不同的操作。
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它的目的是描述第一个参数的值之间的间距),因此结果与你的直觉不符。
如果您确实需要match ,我会简单地使用c = diff(a) / diff(b)并附加值。例如,如果您希望渐变在窗口边缘附近消失,则可以附加零。cc.shapea.shape