Есть ли способ вернуть количество аргументов произвольной функции, которое определено в каком-то другом файле?Я попытался использовать класс Signature в inspect следующим образом:
from foo import func1, func2, func3
from inspect import signature
from scipy.optimize import curve_fit
func_list = [ func1, func2, func3 ]
n, bins, patches = hist( array )
for f in func_list:
sig = signature(f)
args = sig.parameters['args']
p = np.ones( len(args) )
params = curve_fit( f, bins[1:], n, p0 = p )
print(params[0])
Но это не делает то, что мне нужно, так как подпись, из того, что я видел, работает только для локальных пользовательских функций.
Здесь проблема заключается в том, что у меня есть тестовая функция (модифицированная по Гауссу) внутри класса, которая принимает один обязательный параметр (входной массив) и три параметра для подгонки:
def _pdf( self, x, a, b, c ):
return np.sqrt(a) * ( np.exp(-(b*x)**2 / c ) / np.sqrt(2.0 * np.pi) )
Я желаю, чтобы значение len( params[0] )
было 3 в приведенном выше примере.
Инициализация np.ones является произвольной (как я знаю, если не указать, что p0 даст число аргументов, все при предположении1) но я хочу изменить этот массив в будущем.Сейчас мне просто нужно иметь возможность определить длину p0 вручную.
Контекст: я хочу подогнать некоторые параметры кривой, используя scipy, но я не знаю, сколько подгоночных параметров будет иметь каждая кривая, покапользователь загружает их.
Есть идеи?Спасибо