You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于np.gradient()二维数组计算的疑问:2x2元素为何是1.7?

关于np.gradient()二维数组非均匀梯度计算的疑问解答

先看你的示例代码:

dx = 2.
y = [1., 1.5, 3.5]
np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=float), dx, y)

运行结果:

[array([[ 1. ,  1. , -0.5],
        [ 1. ,  1. , -0.5]]),
 array([[2. , 2. , 2. ],
        [2. , 1.7, 0.5]])]

你疑惑的第二数组中索引(1,1)的元素(值1.7),问题出在你用了错误的计算方式——直接取两端点的斜率(5-3)/(3.5-1),但np.gradient对非均匀间隔的中间点,采用的是加权中心差分公式,而非简单的两点差分。

具体计算过程

针对第二行(索引1)的中间元素(值为4),列方向的采样坐标是y = [1., 1.5, 3.5],对应三个点:

  • 左点:x₀=1.0,对应数组值3
  • 当前点:x₁=1.5,对应数组值4
  • 右点:x₂=3.5,对应数组值5

先计算左右间隔:

  • 左间隔:hₗ = x₁ - x₀ = 0.5
  • 右间隔:hᵣ = x₂ - x₁ = 2.0

np.gradient对非均匀中间点的梯度计算公式为:

gradient = [( (y₂ - y₁)/hᵣ ) * hₗ + ( (y₁ - y₀)/hₗ ) * hᵣ ] / (hₗ + hᵣ)

代入数值计算:

  1. 右差分加权:(5-4)/2 * 0.5 = 0.5 * 0.5 = 0.25
  2. 左差分加权:(4-3)/0.5 * 2 = 2 * 2 = 4.0
  3. 加权和:0.25 + 4.0 = 4.25
  4. 除以总间隔:4.25 / (0.5 + 2.0) = 4.25 / 2.5 = 1.7

这就是结果中1.7的由来。

内容的提问来源于stack exchange,提问作者prananna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 23:48:27