Вы можете сделать то, что делает Process.MainWindowHandle
: используйте P / Invoke для вызова функции EnumWindows
, которая вызывает метод обратного вызова для каждого окна верхнего уровня в системе.
В своем обратном вызове вызовите GetWindowThreadProcessId
и сравните идентификатор процесса окна с Process.Id
; если идентификаторы процесса совпадают, добавьте дескриптор окна в список.
Ваше утверждение:
blockquote>
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
blockquote>Это означает, что ваша функция
pipoly()
будет использоватьсяcurve_fit()
должен принимать число аргументов, равное количеству параметров вашего полинома плюс один (переменная, которая является первым аргументом).
Ошибка:TypeError: pipoly () принимает 2 позиционных аргумента, но 3 было дано?
blockquote>говорит вам, что
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.