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

Scipy curve_fit报错求助:结果非有效浮点数组/对象维度过深

解决curve_fit报错:ValueError: object too deep for desired array

报错的核心原因是scipy.optimize.curve_fit要求输入的自变量和因变量必须是一维数组,但你传入的(X,Y)是二维网格数组,Z_noise也是二维数组,不符合函数的输入要求。

解决步骤很简单,只需要把多维数组展平成一维,拟合完成后再把结果恢复成原形状即可:

修改后的完整代码

### Import Libraries
import numpy as np
from scipy.optimize import curve_fit

### Define Function
def Func(vars, C1, C2):
        (X, Y) = vars
        Z1 = (C1*Y**2) / (1+(1-(C1*Y)**2)**0.5)
        Z2 = (C2*X**2) / (1+(1-(C2*X)**2)**0.5)
        return Z1 + Z2

### Y Data
xL = np.linspace(0.0, 10, 11).flatten()   ## Sub
yL = np.linspace(0.0, 100, 101).flatten() ## Main 
X, Y = np.meshgrid(abs(xL), abs(yL))

### Coefficient
C1 = 0.002
C2 = 0.005

### Calculate : Original and Noise Data
Z_original = Func((X, Y), C1, C2)

Z_noise = np.random.normal(size=(len(xL)*len(yL)), scale=0.5)
Z_noise.resize(len(yL), len(xL)) 
Z_noise = Z_original + Z_noise

### Curve_Fit 修改部分
p0 = (0.002, 0.005)
# 将(X,Y)展平为一维数组,Z_noise也展平为一维
popt, pcov = curve_fit(Func, (X.flatten(), Y.flatten()), Z_noise.flatten(), p0)
# 拟合后计算结果,再reshape回原二维形状
Z_curvefit = Func((X,Y), *popt).reshape(Z_original.shape)

关键修改点

  • 调用curve_fit时,用X.flatten()和Y.flatten()把二维网格转成一维数组,同时Z_noise.flatten()把因变量也转成一维
  • 计算Z_curvefit后,用reshape(Z_original.shape)恢复成和原始数据一样的二维形状,方便后续对比或可视化

这样修改后,就能符合curve_fit的输入要求,解决报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:36:29