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

Jupyter Notebook绘制Quiver图时遭遇TypeError问题求助

解决Jupyter Notebook中Quiver图的TypeError问题

我来帮你排查下这个报错的原因,主要是代码里有两处明显的问题,咱们一步步来修正:

1. 列表语法错误

你定义ug的时候用空格分隔元素,Python里列表元素必须用逗号隔开,不然解释器根本识别不了这是合法的列表,这大概率是触发TypeError的第一个原因。

原来的错误写法:

ug = [0.0 0.072 0.128 0.16800000000000004 0.19200000000000006 0.20000000000000007 0.19200000000000006 0.16800000000000004 0.128 0.07200000000000001 1.734723475976807e-17]

修正后:

ug = [0.0, 0.072, 0.128, 0.16800000000000004, 0.19200000000000006, 0.20000000000000007, 0.19200000000000006, 0.16800000000000004, 0.128, 0.07200000000000001, 1.734723475976807e-17]

2. Meshgrid维度不匹配问题

你用(Vg,Ug) = np.meshgrid(0*xg,ug)创建速度数组的方式不对,会导致Ug和之前生成的Xg、Yg维度不兼容——quiver要求四个输入数组(X,Y,U,V)的形状必须完全一致,否则就会报错。

正确的做法是:把一维的ug扩展成和Xg同形状的二维数组,因为每个y位置对应的x方向速度是固定的ug[y],需要把这个值复制到所有x位置上;而y方向速度Vg直接生成全0的同形状数组即可。

修正后的完整代码示例

假设你已经定义了l和d的具体数值(比如下面示例中的l=500、d=10),完整可运行代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 修正后的ug列表
ug = [0.0, 0.072, 0.128, 0.16800000000000004, 0.19200000000000006, 0.20000000000000007, 0.19200000000000006, 0.16800000000000004, 0.128, 0.07200000000000001, 1.734723475976807e-17]
l = 500  # 替换成你实际的l值
d = 10   # 替换成你实际的d值

xg = np.linspace(0, l, int(l/50))
yg = np.linspace(0, d, len(ug))
Xg, Yg = np.meshgrid(xg, yg)

# 创建和Xg/Yg形状匹配的速度数组
Ug = np.repeat(np.array(ug)[:, np.newaxis], len(xg), axis=1)
Vg = np.zeros_like(Ug)  # y方向速度全为0

# 绘制Quiver图
plt.quiver(Xg, Yg, Ug, Vg)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Velocity Field (X-component only)')
plt.show()

额外小提示

如果你习惯用meshgrid,也可以用Ug = np.tile(np.array(ug)[:, np.newaxis], (1, len(xg)))来替代repeat,效果是完全一样的——核心就是保证四个数组的形状完全一致,quiver就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:04:00