1

評価関数 (バイナリ入力/出力を使用する遺伝的プログラミング記号回帰問題の場合) で、異なる数のパラメーターを持つ関数をプログラムで処理できるようにしたいと考えています。(残りのコードは、サンプル データの列数に応じてすべてが自動調整されるように設定されています。入力は 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,
4

1 に答える 1

0

試す:

import inspect

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

または引数funcのない「プレーンな」関数で機能します。*a**k

次に、呼び出すことができます

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

など --funcたとえばこの例のスライスによって、それらの引数の値が単純に決定できる限り、必要な数の引数を与えます。

于 2015-01-12T04:57:18.307 に答える