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

如何从3D numpy meshgrid中提取二维平面数据?

我来帮你解决这个从3D网格中提取二维平面数据的问题!

问题根源分析

你遇到的问题主要有两个:

  • 3D网格生成的X、Y、sumEx、sumEy都是三维数组(形状为(N,N,N)),但2D版的quiver只接受二维数组,你之前只对电场分量做了切片,却忘了处理X和Y;
  • 2D quiver的参数顺序是(X, Y, U, V),你之前的写法把参数位置搞错了。

正确实现方法

咱们一步步来修正:

  1. 确定目标平面的索引
    你用round(N/2)来取中间平面的索引是对的——当N=11时,索引5刚好对应Z轴的0位置(因为你的Z网格是linspace(-4,4,11),第6个点就是0)。

  2. 对所有相关数组做二维切片
    把X、Y、sumEx、sumEy都提取出[:,:,zplane]的二维切片,这样它们的形状就变成(N,N),完全符合2D绘图的要求。

  3. 调用正确的2D绘图函数
    使用子图的ax.quiver,传入切片后的二维数组即可。

完整修正代码示例

在你完成3D电场计算后,添加这段代码:

# 提取Z=0平面的索引
zplane = round(N/2)

# 对所有数组做二维切片,得到平面数据
X_slice = X[:, :, zplane]
Y_slice = Y[:, :, zplane]
Ex_slice = sumEx[:, :, zplane]
Ey_slice = sumEy[:, :, zplane]

# 绘制2D电场矢量图
fig, ax = plt.subplots()
ax.quiver(X_slice, Y_slice, Ex_slice, Ey_slice, pivot='middle', normalize=True)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('Electric Field in Z=0 Plane')
plt.show()

额外扩展:提取其他平面

如果需要提取X固定或Y固定的平面,比如X=0的平面,只需要调整切片的维度即可:

# 提取X=0平面的索引
xplane = round(N/2)

# 提取Y、Z平面坐标和对应的电场分量
Y_slice = Y[xplane, :, :]
Z_slice = Z[xplane, :, :]
Ey_slice = sumEy[xplane, :, :]
Ez_slice = sumEz[xplane, :, :]

# 绘图
fig, ax = plt.subplots()
ax.quiver(Y_slice, Z_slice, Ey_slice, Ez_slice, pivot='middle', normalize=True)
ax.set_xlabel('Y')
ax.set_ylabel('Z')
ax.set_title('Electric Field in X=0 Plane')
plt.show()

这样就能轻松提取任意二维平面的数据并完成绘图啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:48