Python:DEAP:以编程方式处理函数参数的数量
Python: DEAP: programatically handle number of func parameters
在评估函数中(对于二进制 input/output 的遗传编程符号回归问题),我希望能够以编程方式处理具有不同数量参数的函数。 (我设置了其余代码,以便根据示例数据中的列数自动调整所有内容。输入是 numpy.ndarray(矩阵))。如果不做几个 if 语句,我将如何使用下面的代码来做到这一点? (在下面的代码中,func 需要 3 个输入,第 4 列是答案,但任何其他 运行 可能有不同数量的输入。我想自动处理这个。)
# 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,
尝试:
import inspect
def numargs(func):
args, varargs, keywords, defaults = inspect.getargspec(func)
return len(args)
适用于没有 *a
或 **k
参数的 "plain" 函数 func
。
然后,您可以拨打
func(*inputDataTransposed[:numargs(func)])
等等——给 func
想要多少参数就给多少,只要这些参数的值可以简单地确定,例如通过本例中的切片。
在评估函数中(对于二进制 input/output 的遗传编程符号回归问题),我希望能够以编程方式处理具有不同数量参数的函数。 (我设置了其余代码,以便根据示例数据中的列数自动调整所有内容。输入是 numpy.ndarray(矩阵))。如果不做几个 if 语句,我将如何使用下面的代码来做到这一点? (在下面的代码中,func 需要 3 个输入,第 4 列是答案,但任何其他 运行 可能有不同数量的输入。我想自动处理这个。)
# 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,
尝试:
import inspect
def numargs(func):
args, varargs, keywords, defaults = inspect.getargspec(func)
return len(args)
适用于没有 *a
或 **k
参数的 "plain" 函数 func
。
然后,您可以拨打
func(*inputDataTransposed[:numargs(func)])
等等——给 func
想要多少参数就给多少,只要这些参数的值可以简单地确定,例如通过本例中的切片。