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

Python绘制3D动量平面报错:ValueError: Argument Z must be 2-dimensional

解决Matplotlib 3D绘图中Z必须为二维数组的错误

错误原因

你遇到的ValueError: Argument Z must be 2-dimensional是因为:

  • plot_surface要求Z参数必须是和X、Y维度完全匹配的二维数组(X和Y由meshgrid生成,形状为(len(m), len(H_1)))
  • 你的代码中,每次外层循环(遍历质量m的元素)都会将M重置为一维数组np.zeros(len(H_1)),最终M仅保留了最后一个质量对应的力矩数据,是一维数组,无法和二维的X、Y匹配。
  • 另外内层循环误用了和外层相同的变量名i,会导致外层循环的索引被覆盖,逻辑出错。

修正后的循环版本代码

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits import mplot3d

g = 9.81
m = np.linspace(0, 1, 301)
H_1 = np.arange(100, 401, 1)

# 初始化二维数组,行数对应质量数量,列数对应高度数量
M = np.zeros((len(m), len(H_1)))

for i, kg in enumerate(m):
    Fg = -kg * g
    # 内层循环改用j作为索引,避免和外层i冲突
    for j, h in enumerate(H_1):
        F1 = np.array([0, Fg])
        theta = np.arctan(200 / h)
        F2 = np.array([Fg * np.sin(theta), Fg * np.cos(theta)])
        Fres = F1 + F2
        M_arm = np.array([0, h])
        # 为二维数组的(i,j)位置赋值,对应第i个质量、第j个高度的力矩
        M[i, j] = np.cross(M_arm, Fres) / 10e3

x, y = np.meshgrid(H_1, m)
z = M

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

ax.plot_surface(x, y, z)
ax.set_xlabel('hoogte toren in (mm)')
ax.set_ylabel('massa')
ax.set_zlabel('momentum')

plt.show()

优化的向量化版本(推荐)

利用Numpy的广播机制替代嵌套循环,计算效率更高:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits import mplot3d

g = 9.81
m = np.linspace(0, 1, 301)
H_1 = np.arange(100, 401, 1)

# 生成二维网格,indexing='ij'保证m对应行、H对应列,匹配后续计算维度
m_mesh, H_mesh = np.meshgrid(m, H_1, indexing='ij')

Fg = -m_mesh * g
theta = np.arctan(200 / H_mesh)

# 向量化计算合力分量
F1_x = np.zeros_like(Fg)
F1_y = Fg
F2_x = Fg * np.sin(theta)
F2_y = Fg * np.cos(theta)
Fres_x = F1_x + F2_x
Fres_y = F1_y + F2_y

# 二维叉乘简化计算:M_arm=(0, H_mesh),叉乘结果为0*Fres_y - H_mesh*Fres_x
M = (-H_mesh * Fres_x) / 10e3

x, y = np.meshgrid(H_1, m)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')

ax.plot_surface(x, y, M)
ax.set_xlabel('hoogte toren in (mm)')
ax.set_ylabel('massa')
ax.set_zlabel('momentum')

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:20:22