如何解读numpy.gradient?

时间:2015-04-22 00:55:28

标签: numpy

在文档的第一个示例中 http://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html

x = np.array([1, 2, 4, 7, 11, 16], dtype=np.float)
np.gradient(x)
array([ 1. ,  1.5,  2.5,  3.5,  4.5,  5. ])

输出应该是:

array([ 1. ,  1.,  2.,  3.,  4.,  5. ])

???

2 个答案:

答案 0 :(得分:7)

Numpy-gradient在适当情况下使用forwardbackwardcentral差异。

输入:

x = np.array([1, 2, 4, 7, 11, 16], dtype=np.float)
np.gradient(x)      # this uses default distance=1

输出:

  

数组([1,1.5,2.5,3.5,4.5,5。])


对于第一项使用前向差异:
(2 - 1)/ 1 = 1。

对于最后一项使用后向差异:
(16 - 11)/ 1 = 5。

并且,对于中间的项目,应用中心差异:
(4 - 1)/ 2 = 1.5
(7 - 2)/ 2 = 2.5
(11 - 4)/ 2 = 3.5
(16 - 7)/ 2 = 4.5

差异除以前向和后向差异的样本距离(默认值= 1),但是中心差异的距离是获得适当梯度的两倍。

答案 1 :(得分:3)

您期望输出的内容是运行np.diff时会得到的结果,但是会缩短一个元素:

np.diff(arr)
>>> array([ 1.,  2.,  3.,  4.,  5.])

np.gradient看起来采用第i个元素并查看(i+1)'与i'元素和(i-1)'的差异之间的平均值th与i'元素。对于边缘值,它只能使用一个点。因此,1.5的第二个值来自平均(2-1)(4-2)