Python 将多项式拟合到 3d 数据
Python Fit Polynomial to 3d Data
有一组数据点 (x,y,z),并尝试使用 scipy optimize.curve_fit 将通用二次方程拟合到它们。
我尝试了几种不同的方法,但似乎无法奏效。关于为什么我会收到此错误或推荐的不同方法的任何指导?
错误是"ValueError: operands could not be broadcast together with shapes (2,) (12,)"
import scipy.optimize as optimize
XY = [(11, 70), (11, 75), (11, 80), (11, 85), (12, 70), (12, 75), (12, 80), (12, 85), (13, 70), (13, 75), (13, 80), (13, 85)]
Z = [203.84, 208, 218.4, 235.872, 228.30080000000004, 232.96000000000004, 244.60800000000006, 264.1766400000001, 254.8, 260, 273, 294.84000000000003]
guess = (1,1,1,1,1,1)
def fit(X, a, b, c, d, f, g):
return a + (b*X[0])+(c*X[1])+(d*X[0]**2)+(f*X[1]**2)+(g*X[0]*X[1])
params, cov = optimize.curve_fit(fit, XY, Z, guess)
根据 docs,您需要 XY
大小为 (k,M)
,其中 k
是维度,M
是样本数。在您的情况下,您已将 XY
定义为大小 (M,k)
.
尝试以下方法
import numpy as np
...
params, cov = optimize.curve_fit(fit, np.transpose(XY), Z, guess)
有一组数据点 (x,y,z),并尝试使用 scipy optimize.curve_fit 将通用二次方程拟合到它们。
我尝试了几种不同的方法,但似乎无法奏效。关于为什么我会收到此错误或推荐的不同方法的任何指导?
错误是"ValueError: operands could not be broadcast together with shapes (2,) (12,)"
import scipy.optimize as optimize
XY = [(11, 70), (11, 75), (11, 80), (11, 85), (12, 70), (12, 75), (12, 80), (12, 85), (13, 70), (13, 75), (13, 80), (13, 85)]
Z = [203.84, 208, 218.4, 235.872, 228.30080000000004, 232.96000000000004, 244.60800000000006, 264.1766400000001, 254.8, 260, 273, 294.84000000000003]
guess = (1,1,1,1,1,1)
def fit(X, a, b, c, d, f, g):
return a + (b*X[0])+(c*X[1])+(d*X[0]**2)+(f*X[1]**2)+(g*X[0]*X[1])
params, cov = optimize.curve_fit(fit, XY, Z, guess)
根据 docs,您需要 XY
大小为 (k,M)
,其中 k
是维度,M
是样本数。在您的情况下,您已将 XY
定义为大小 (M,k)
.
尝试以下方法
import numpy as np
...
params, cov = optimize.curve_fit(fit, np.transpose(XY), Z, guess)