вопрос про звёздочку в кривой подгонки кода - PullRequest
0 голосов
/ 28 марта 2020

В этом следующем примере, где он пытается изогнуть сигмоидную функцию для данных, я не понимаю, что означает * в *ppot в строке 11

from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x, Beta_1, Beta_2):
     y = 1 / (1 + np.exp(-Beta_1*(x-Beta_2)))
     return y
popt, pcov = curve_fit(sigmoid, xdata, ydata)
x = np.linspace(1960, 2015, 55)
x = x/max(x)
plt.figure(figsize=(8,5))
y = sigmoid(x, *popt)
plt.plot(xdata, ydata, 'ro', label='data')
plt.plot(x,y, linewidth=3.0, label='fit')
plt.legend(loc='best')
plt.ylabel('GDP')
plt.xlabel('Year')
plt.show()

заранее спасибо.

1 Ответ

1 голос
/ 28 марта 2020

Метод curve_fit возвращает popt в виде списка значений, в данном случае это список из 2 значений (оптимальных значений для параметров).

Добавление * до разбиения списка список в его значениях, каждое из которых назначено параметру функции.

Пример

>>> # Sample list
>>> lst = [1, 2, 3]
>>> lst
[1, 2, 3]

>>> # Creating a function that requires 3 parameters
>>> def add(x, y, z):
...     return x + y + z
... 

>>> add(*lst)
6

>>> add(lst)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: add() missing 2 required positional arguments: 'y' and 'z'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...