在 python 中拟合二维函数
Fitting 2D functions in python
我有两个变量,x 和 y 在 x_values 和 y_values 中取值:
x_values = np.linspace(x_min,x_max,n)
y_values = np.linspace(y_min,y_max,n)
和一个测量的二维数组 z (n x n 矩阵)。
我想用函数拟合 z,例如 scipy.optimize.curve_fit。
但如果我是正确的,这仅适用于一维函数。
我的梦想是:
curve_fit2D(custom_2D_function, (x_values,y_values), z)
我在 scipy 文档中找不到任何内容,是否缺少某些内容?
来自curve_fit
documentation:
xdata: array_like or object
The independent variable where the data is measured. Should usually be an
M-length sequence or an (k,M)-shaped array for functions with k predictors,
but can actually be any object.
这意味着您的 xdata
的每一列必须对应于 z
.
的一个条目
解决方案
重塑数据,使每个 z
有一对 (x, y)
。假设 (x[i], y[j])
与 z[i, j]
一致,你可以这样重塑。
z_vec = z.flatten()
x_data = np.array([
(x[i // z.shape[1]], y[i % z.shape[1]])
for i in range(len(z_vec))
]).T
assert x_data.shape[1] == len(z_vec)
assert x_data.shape[0] == 2
然后照常使用curve_fit
。
curve_fit(custom_2D_function, x_data, z_vec)
我有两个变量,x 和 y 在 x_values 和 y_values 中取值:
x_values = np.linspace(x_min,x_max,n)
y_values = np.linspace(y_min,y_max,n)
和一个测量的二维数组 z (n x n 矩阵)。
我想用函数拟合 z,例如 scipy.optimize.curve_fit。 但如果我是正确的,这仅适用于一维函数。
我的梦想是:
curve_fit2D(custom_2D_function, (x_values,y_values), z)
我在 scipy 文档中找不到任何内容,是否缺少某些内容?
来自curve_fit
documentation:
xdata: array_like or object
The independent variable where the data is measured. Should usually be an
M-length sequence or an (k,M)-shaped array for functions with k predictors,
but can actually be any object.
这意味着您的 xdata
的每一列必须对应于 z
.
解决方案
重塑数据,使每个 z
有一对 (x, y)
。假设 (x[i], y[j])
与 z[i, j]
一致,你可以这样重塑。
z_vec = z.flatten()
x_data = np.array([
(x[i // z.shape[1]], y[i % z.shape[1]])
for i in range(len(z_vec))
]).T
assert x_data.shape[1] == len(z_vec)
assert x_data.shape[0] == 2
然后照常使用curve_fit
。
curve_fit(custom_2D_function, x_data, z_vec)