我试图拟合一组数据(x,y,z)以通过 curve_fit 获得结果曲面的最佳拟合。特别是 z 数组必须是 NxM “矩阵”。为了向您展示一个示例,我将与您分享我编写的代码:
from scipy.optimize import curve_fit
import numpy as np
#Generate random 3D data points
x = np.random.random(10)
y = np.random.random(10)
X,Y = np.meshgrid(x,y)
z = np.sin(X * Y)
def func(xy, a, b, c, d, e, f):
x, y = xy
return a + b*x + c*y + d*x**2 + e*y**2 + f*x*y
#Perform curve fitting
popt, pcov = curve_fit(func, (X, Y), z)
#Print optimized parameters
print(popt)
当我启动代码时,出现以下错误
ValueError: object too deep for desired array
Traceback (most recent call last):
File "C:\Users\..\PycharmProjects\GSP_Speed\prova.py", line 21, in <module>
popt, pcov = curve_fit(func, (X, Y), z)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\..\PycharmProjects\GSP_Speed\venv\Lib\site-packages\scipy\optimize\_minpack_py.py", line 963, in curve_fit
res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\..\PycharmProjects\GSP_Speed\venv\Lib\site-packages\scipy\optimize\_minpack_py.py", line 428, in leastsq
retval = _minpack._lmdif(func, x0, args, full_output, ftol, xtol,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_minpack.error: Result from function call is not a proper array of floats.`
有人可以帮我解决这个问题吗? 非常感谢你
我尝试使用 x,y 和 X,Y 作为 curve_fit 函数的输入,但它不起作用
我已经尝试使用 x,y 和 X,Y 作为 curve_fit 的输入,但没有成功
我刚刚在 ChatGPT 上复制粘贴了您的帖子,并使用
jupyter notebook
进行了测试,结果为 [-0.04166698 0.13532234 0.12139508 -0.0873608 -0.07659318 0.83186632]
。你自己检查一下吧!
from scipy.optimize import curve_fit
import numpy as np
# Generate random 3D data points
x = np.random.random(10)
y = np.random.random(10)
X, Y = np.meshgrid(x, y)
z = np.sin(X * Y)
def func(xy, a, b, c, d, e, f):
x, y = xy
return a + b * x + c * y + d * x**2 + e * y**2 + f * x * y
# Flatten X and Y arrays
X_flat = X.flatten()
Y_flat = Y.flatten()
# Perform curve fitting
popt, pcov = curve_fit(func, (X_flat, Y_flat), z.flatten())
# Print optimized parameters
print(popt)