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

Python使用matplotlib quiver绘制随机选取二维矢量场矢量报错问询

问题原因
  • matplotlib.pyplot.quiver的标准传参规则为quiver(X, Y, U, V),其中X为所有采样点的x坐标数组、Y为所有采样点的y坐标数组、U为对应位置矢量的x分量数组、V为对应位置矢量的y分量数组,四个参数的长度必须完全匹配。
  • 第一次调用plt.quiver(xm,vectors[:,0],vectors[:,1])时,你传入的第一个参数xm是形状为(M, 2)的二维数组,包含了所有点的x、y坐标,matplotlib会错误将其解析为总长度为2*M的X坐标序列,后续U、V长度均为M,因此触发维度不匹配报错。
  • 第二次修改后的写法把[xm[:,0],xm[:,1]]作为第一个参数,本质还是将x、y坐标合并成了长度为2*M的数组,仍然不符合参数要求。
解决方案

将采样点的x、y坐标拆分后作为前两个独立参数传入quiver即可,修正后的调用代码为:

plt.quiver(xm[:, 0], xm[:, 1], vectors[:, 0], vectors[:, 1])
# 如需显示图像可补充调用plt.show()
plt.show()
可选优化

原代码中的循环采样部分可以用numpy向量化操作简化,提升运行效率:

M = 10
# 直接批量生成M个随机采样点,形状为(M, 2)
xm = rn.uniform(-L, L, size=(M, 2))
# 批量计算所有采样点的矢量值
vectors = np.apply_along_axis(lambda pos: dipole(pos[0], pos[1]), 1, xm)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:08