numpy.gradient() 似乎产生错误的边界值(使用一阶差分)

3 投票
1 回答
1506 浏览
提问于 2025-04-27 12:08

看起来在使用numpy.gradient()这个函数时(numpy版本1.9.0),它在计算边界值(也就是开始和结束的值)时出现了一些问题。我知道它是用“首差”来计算边界值,而中间的值是用“中心差”来计算的。举个例子:

import numpy as np
arr = np.array([1, 2, 4])
arrgrad = np.gradient(arr)

在这里,我本来期待arrgrad能得到这些值:

[ 1.   1.5  2. ]

也就是说:

arrgrad[0] = (2-1)/1 = 1
arrgrad[1] = (4-1)/2 = 1.5  
arrgrad[2] = (4-2)/1 = 2

但是我得到的结果却是:

[ 0.5  1.5  2.5]

而numpy.gradient()在1.8.1版本的表现(可以从https://github.com/numpy/numpy/blob/v1.8.1/numpy/lib/function_base.py找到)似乎能产生正确的结果。

那么,上面描述的错误行为是因为一个bug吗?(我使用的是Python 3.4.2,64位。)

暂无标签

1 个回答

5

显然,在1.8.1和1.9.0版本之间,梯度的计算方式发生了变化。这次变化是由一个叫做332d628的更新引起的。现在,边界元素的计算也使用了更精确的二阶近似,而之前只使用了一阶近似。

不过,numpy官网上的文档只更新到1.8.1版本,没有1.9.0的相关内容。如果你想查看正确的文档,可以使用 np.source(np.gradient) 或者 print(np.gradient.__doc__) 来获取。

撰写回答