MyClass
多くのシミュレーション データを含むクラスを作成しました。このクラスは、類似した構造を持つさまざまなシミュレーションのシミュレーション結果をグループ化します。結果はMyClass.get(foo)
メソッドで取得できます。これは、simulationID/配列のペアを持つ辞書を返します。配列はfoo
各シミュレーションの値です。
今、クラスにメソッドを実装して、任意の関数をすべての配列に適用したいと考えていますfoo
。これは、simulationID/function(foo) のペアを含む辞書を返す必要があります。
追加の引数を必要としない関数の場合、次の解決策が非常に満足のいくものであることがわかりました (コメントはいつでも歓迎します :-) ):
def apply(self, function, variable):
result={}
for k,v in self.get(variable).items():
result[k] = function(v)
return result
ただし、追加の引数を必要とする関数の場合、エレガントな方法でそれを行う方法がわかりません。典型的な操作は と を のような x 値として統合foo
することで、 と の両方をで取得できます。bar
np.trapz(foo, x=bar)
foo
bar
MyClass.get(...)
私はこの方向で考えていました:
def apply(self, function_call):
"""
function_call should be a string with the complete expression to evaluate
eg: MyClass.apply('np.trapz(QHeat, time)')
"""
result={}
for SID in self.simulations:
result[SID] = eval(function_call, locals=...)
return result
問題は、ローカル マッピング オブジェクトを渡す方法がわからないことです。あるいは、間違った方向を見ているのかもしれません。よろしくお願いいたします。
ロエル