Из документации curve_fit
:
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
.
Решение
Измените форму данных так, чтобы у вас была одна пара (x, y)
для каждой z
. Предполагая, что (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)