2012-08-31 6 views
23

파이썬에는 많은 매개 변수가있는 함수가 있습니다. 이 함수를 데이터 세트에 맞추고 싶지만 단 하나의 매개 변수 만 사용하여 나머지 매개 변수를 직접 제공하고 싶습니다. I는 피팅 만 a 대해 수행되고, 상기 파라미터 b 루프 변수의 값을 취하려는 것이 이것으로파이썬에서 많은 매개 변수가있는 함수의 매개 변수 하나만 맞추기

def func(x,a,b): 
    return a*x*x + b 

for b in xrange(10): 
    popt,pcov = curve_fit(func,x1,x2) 

다음은 예이다. 어떻게 할 수 있습니까? 다음과 같이

+0

당신은 http://en.wikipedia.org/wiki/Curve_fitting을보아야합니다. – ninjagecko

+0

커브를 "맞추는"의미와 각 방법에 대해 구현하는 많은 방법을 정의하는 무한한 방법이 있습니다. 커브 피팅 유형은 종종 해결하려는 문제에 따라 달라집니다. 당신이 신경 쓰지 않는다고 가정 할 때, 한 가지 간단한 방법을 최소 제곱이라 부름으로써 오류의 제곱의 합을 최소화합니다. 다음은 "감쇠가 최소화 된"최소 제곱에 대한 솔루션을 계산하는 미리 만들어진 라이브러리입니다. http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html 질문은 불완전합니다. 커브 피팅에 관한 특정 질문을 닫고 다시 열 것을 제안합니다. – ninjagecko

+5

알고리즘에 신경 쓰지 않고 scipy.optimize의 curve_fit 만 사용합니다. 내가 이해할 수없는 것은 매개 변수 중 하나가 내 값을 받아야하고 매개 변수가 적합해야한다는 것을 어디에서 지정해야 하는가? – lovespeed

답변

31

당신은 람다에 func을 포장 할 수 있습니다

def func(x,a,b): 
    return a*x*x + b 

for b in xrange(10): 
    popt,pcov = curve_fit(lambda x, a: func(x, a, b), x1, x2) 

람다는 파이썬에서 단순한 한 줄의 기능에 사용할 수있는 익명 함수입니다. 기본적으로 함수에 이름을 할당 할 필요가 없을 때 코드 양을 줄이기 위해 일반적으로 사용됩니다. 더 자세한 설명은 공식 문서에 나와 있습니다 : http://docs.python.org/tutorial/controlflow.html#lambda-forms

이 경우, λ는 func 인수 중 하나를 수정하는 데 사용됩니다. 새로 생성 된 함수는 xa의 두 인수 만 허용하며 b은 로컬 b 변수에서 가져온 값으로 고정됩니다. 이 새로운 함수는 인수로 curve_fit에 전달됩니다.

+0

정교하게 주시겠습니까? 람다 란 무엇입니까? – lovespeed

+0

답변에 대한 자세한 내용을 추가했습니다. –

0

원본 기능을 기꺼이/수정할 수있는 경우 더 간단한 옵션이 있습니다.

for b in xrange(10): 
    popt,pcov = curve_fit(func, x1, x2) 

경고 : : 당신은 단순히 매개 변수 B에 대한 루프에 넣을 수있는 그런

def func(x,a): 
    return a*x*x + b 

:로

이 함수를 다시 정의 함수가 동일한 스크립트에 정의 될 필요가있는 이것이 작동하도록 요구됩니다.

관련 문제