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

Python绘制2D高斯函数梯度矢量quiver图代码异常排查

2D高斯梯度矢量图绘制问题分析

你代码的核心问题出在梯度分量的赋值顺序错误,次要问题是绘制用的坐标和原始函数坐标不匹配,具体如下:

  • 梯度分量顺序错误:np.gradient(z)返回的2D梯度结果中,第一个元素是沿y轴(行方向)的梯度分量,第二个元素才是沿x轴(列方向)的梯度分量,你代码里把两个分量赋值反了,直接导致箭头方向全部错误。
  • 坐标不匹配:你后续生成了range(50)的索引网格用于绘图,和原始高斯函数定义的[-5,5]物理坐标没有对应,虽然不影响方向展示,但会导致坐标刻度不符合函数实际定义域。

修正后可运行代码

import numpy as np
from matplotlib import pyplot as plt

# define normalized 2D gaussian
def gaus2d(x=0, y=0, mx=0, my=0, sx=1, sy=1):
    return 1. / (2. * np.pi * sx * sy) * np.exp(-((x - mx)**2. / (2. * sx**2.) + (y - my)**2. / (2. * sy**2.)))

x = np.linspace(-5, 5)
y = np.linspace(-5, 5)
x, y = np.meshgrid(x, y) # get 2D variables instead of 1D
z = gaus2d(x, y)

gauss_grad = np.gradient(z) # calculating array of gaussian gradient

# 修正梯度分量赋值顺序,同时匹配原始物理坐标
U = gauss_grad[1] # x分量对应第二个返回值
V = gauss_grad[0] # y分量对应第一个返回值

fig, hf = plt.subplots(figsize=(10,10)) # setting up quiver plot
hf.set_title("Example - gradient of gaussian- every 2nd arrow")
# 直接用原始x、y网格绘制,调整scale参数适配梯度数值
Q = hf.quiver(x[::2, ::2], y[::2, ::2], U[::2, ::2], V[::2, ::2], units='width',
    pivot='mid', scale=0.01, headwidth=5)
qk = hf.quiverkey(Q, 0.9, 0.9, 0.001, r'$2d \ vector \ plot$', labelpos='E',
    coordinates='figure')
hf.scatter(x[::2, ::2], y[::2, ::2], color='c', s=0)

plt.show()

运行修正后的代码即可得到符合预期的梯度矢量图:所有箭头指向高斯分布的中心(对应函数值上升最快的方向)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:30:04