Python / curve_fit: невозможно передать массив с предположением инициализации

Вы можете сделать то, что делает Process.MainWindowHandle: используйте P / Invoke для вызова функции EnumWindows , которая вызывает метод обратного вызова для каждого окна верхнего уровня в системе.

В своем обратном вызове вызовите GetWindowThreadProcessId и сравните идентификатор процесса окна с Process.Id; если идентификаторы процесса совпадают, добавьте дескриптор окна в список.

1
задан TomR 4 March 2019 в 14:53
поделиться

1 ответ

Ваше утверждение:

pj должен быть массивом, который содержит коэффициенты полинома;

неверен. В соответствии с документация curve_fit () :

scipy.optimize.curve_fit (f, xdata, ydata, p0 = None, sigma = нет, absolute_sigma = False, check_finite = True, bounds = (- inf, inf), method = None, jac = None, ** kwargs) [source] Использовать нелинейные наименьшие квадраты для подгонки функции f к данным.

Предполагается ydata = f (xdata, * params) + eps

Это означает, что ваша функция pipoly() будет использоваться curve_fit() должен принимать число аргументов, равное количеству параметров вашего полинома плюс один (переменная, которая является первым аргументом).
Ошибка:

TypeError: pipoly () принимает 2 позиционных аргумента, но 3 было дано?

говорит вам, что pipoly получает 3 аргумента, потому что вы, вероятно, были тестирование линейного полинома, поэтому три аргумента были независимой переменной и двумя параметрами (материал [f-f0[j] for f in f_df[if0[j]:if0[i]]] представляет собой список из 2 длин).
Как вы пишете, вместо этого требуется только 2 аргумента.

Вы можете легко решить вашу проблему, добавив звездочку перед pj:

def pipoly(df,*pj):
    n=len(pj) #len() is sufficient here, but np.size() works too.
    p=pj[0]
    for j in range(1,n):
        p+=pj[j]*df**j
    return p

Таким образом, ваша функция принимает переменное число аргументов. Здесь подробнее о значении и использовании звездочки в параметрах функции python.

0
ответ дан Valentino 4 March 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: