2015-01-12 3 views
1

평가 함수 (이진 입력/출력을 가진 유전 프로그래밍의 회귀 문제)에서 다른 수의 매개 변수를 가진 함수를 프로그래밍 방식으로 처리 할 수 ​​있어야합니다. (나머지 코드는 모두 샘플 데이터에있는 열 수에 따라 자동으로 조정됩니다. 입력은 numpy.ndarray (행렬)입니다.). if 문을 여러 개 만들지 않고 아래 코드를 사용하면 어떻게 될까요? (아래 코드에서 FUNC 3 개 입력을 받아 4 열은 대답하지만이 작업을 자동으로 처리 할 다른 실행은 입력의 다른 번호를 가질 수있다..)Python : DEAP : 프로그래밍 방식으로 func 매개 변수의 수를 처리하십시오.

# EVALUATOR 
def evalSymbReg(individual): 
    # Transform the tree expression in a callable function 
    numOfNodes = len(individual) 
    func = toolbox.compile(expr=individual) 
    # diff = the number wrong/the total number of questions 
    diff = (numpy.sum((func(inputDataTransposed[0], inputDataTransposed[1], inputDataTransposed[2]) - inputDataTransposed[3])**2).astype(numpy.float64)/len(inputDataTransposed[0])) 
    return diff, 

답변

0

시도 :

import inspect 

def numargs(func): 
    args, varargs, keywords, defaults = inspect.getargspec(func) 
    return len(args) 

은 "plain"함수 func에 대해 *a 또는 **k 인수없이 작동합니다.

그런 다음

func(*inputDataTransposed[:numargs(func)]) 

를 호출 할 수 있습니다 등 -은 그 인수의 값이의 조각에 의해 예, 간단하게 판단 할 수있는 한, 원하는대로 func만큼 많은 인수를 제공 예.