如何理解numpy.渐变?

tjvv9vkg  于 2023-03-12  发布在  其他
关注(0)|答案(2)|浏览(116)

在文档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. ])

???

5lhxktic

5lhxktic1#

数字渐变在适当的情况下使用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. ])
对于第一项,它使用前向(当前-〉下一个)差值:

  • 先前号码:无
  • 当前(第一个)号码:1
  • 下一个号码:2
    (2 - 1)/ 1 = 1。
    对于最后一项,它使用向后(前一项-〉当前项)差值:
  • 先前号码:11
  • 当前(最后)号码:16
  • 下一个号码:无
    (16- 11)/ 1 = 5。
    并且,对于中间的项目,应用中心差异:
  • 先前号码:1
  • 当前编号:2
  • 下一个号码:4
    (4 - 1)/ 2 = 1.5
  • 先前号码:2
  • 当前编号:4
  • 下一个号码:7
    (7 - 2)/ 2 = 2.5
    ...
    等等:
    (11- 4)/ 2 = 3.5
    (16-7)/ 2 = 4.5
    对于向前和向后差异,将差异除以采样距离(默认值=1),但对于中心差异,将距离除以两倍,以获得适当的梯度。
zbwhf8kr

zbwhf8kr2#

您所期望的输出与运行np.diff时所得到的输出相同,但是少了一个元素:

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

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

相关问题