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

numpy广播错误:无法将(3,3)数组广播至(3,)的问题排查

问题原因与解决办法

报错根源

你定义的常数向量是**(3,1)的二维数组**(内层额外添加了方括号),但np.dot(3×3矩阵, s)返回的是**(3,)的一维数组**——solve_ivp传入的s是一维数组,矩阵与一维数组的点积结果也为一维。两者形状不兼容,numpy尝试广播时就会抛出“无法从(3,3)广播到(3,)”的错误。

修复方案

只需把常数向量改成一维数组(去掉内层的方括号),让它和点积结果形状一致即可:

F = lambda t, s: np.array([-6.75e-6, 1.68e-6, -5.85e-6]) - np.dot(np.array([[0.0303,0,0],[0,1.4666,0],[0,0,0.4078]]), s)

更简洁的写法(推荐)

提前定义矩阵和常数向量,避免重复创建数组,代码可读性更高:

import matplotlib.pyplot as plt 
import numpy as np 
from scipy.integrate import solve_ivp

# 提前定义矩阵和常数向量
A = np.array([[0.0303,0,0],[0,1.4666,0],[0,0,0.4078]])
b = np.array([-6.75e-6, 1.68e-6, -5.85e-6])

# 使用@运算符代替np.dot,语法更直观
F = lambda t, s: b - A @ s

sol = solve_ivp(F, [1, 33], [1,1,1])

修改后,b是(3,)的一维数组,A @ s返回的也是(3,)数组,减法操作可正常执行,不会再出现形状不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:36:22