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

Python numpy绘图触发ValueError数组形状不匹配报错求助

NumPy循环赋值形状不匹配报错解决

报错核心原因

触发ValueError: could not broadcast input array from shape (99,) into shape (100,)的根源有两个:

  • 你调用的It.cumtrapz(累积梯形积分函数)默认输出长度比输入数组少1:n个采样点的梯形积分是基于n-1个相邻区间计算的,传入长度100的数组时,默认返回长度99的积分结果,自然无法赋值给长度100的solA[:, i]列。
  • 你传入cumtrapz的数组索引写错了:循环里sol[:, i]才是第i组参数下求解得到的完整时序结果,你写的sol[i:, 1]是固定取sol第2列(索引为1)从第i行开始的切片,既不是当前循环的计算结果,切片长度还会随i增大不断变短,哪怕解决了长度问题结果逻辑也是错的。

你注释掉solA赋值语句后打印两个数组形状都是(100,100),是因为此时solA始终是初始化生成的全零数组,根本没进入赋值逻辑,这个验证结果不能说明赋值语句本身的形状匹配性。

修复方案

直接修改循环内的solA赋值逻辑即可:

  • 把待积分的输入修正为当前循环算出的时序解sol[:, i]
  • 给cumtrapz传入initial=0参数,让函数在积分结果头部补初始值0,输出长度和输入数组保持一致,刚好匹配solA的列长度

修复后的完整循环代码如下:

sol = np.zeros((partition, partition))
solA = np.zeros((partition, partition))
for i in range(partition):
    sol[:, i] = odeint(SolveMe, ic, timeSpace, args=(zeemanSpace[i],))[:, 1]
    # 修正索引+对齐积分结果长度
    solA[:, i] = (1/time[-1]) * It.cumtrapz(sol[:, i], timeSpace, initial=0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:24:28