在 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)