Подгонка только некоторых параметров с помощью функции curve_fit - PullRequest
0 голосов
/ 14 марта 2020

Я определил функцию с 5 параметрами. Я пытаюсь привести свои данные в соответствие с определенной моделью, но у меня уже есть значения beta и l_f, поэтому я использую ключевое слово lambda, чтобы соответствовать только некоторым параметрам. Я должен соответствовать данным несколько раз, и я использую для l oop, чтобы сделать это. Каждый раз, когда мы вводим для l oop, значения бета и l_f меняются (они хранятся в массиве). Проблема в том, что при запуске кода ниже форма массива не совпадает. Есть идеи, как решить эту проблему и заставить код работать?

def richards(t, beta, l_f, nu, k, t_m):
    denom = 1 + nu * np.exp(-k * (t - t_m))
    return beta + l_f / np.power(denom, 1/nu)

coords = [(0, 0), (1, 1), (16, 24), (20, 12), (24, 40), (31, 47)]

params = np.zeros((len(coords), 5))

for i, (r, c) in enumerate(coords):
    params[i, :] = curve_fit(
        f     = lambda t, nu, k, t_m: richards(t, betas[i], lfs[i], nu, k, t_m),
        xdata = ts,
        ydata = plates[0, r, c]
    )[0]

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-344-dc9708b2feb4> in <module>
      7         xdata = ts,
      8         ydata = plates[0, r, c]
----> 9     )[0]

ValueError: could not broadcast input array from shape (3) into shape (5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...