我创建了一个MyClass
包含大量模拟数据的类。类对具有相似结构的不同模拟的模拟结果进行分组。可以使用MyClass.get(foo)
方法检索结果。它返回一个带有模拟ID/数组对的字典,数组是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
但是,对于需要额外参数的函数,我看不到如何以优雅的方式进行操作。一个典型的操作是将foo
withbar
作为 x 值的积分,例如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
问题是我不知道如何传递本地映射对象。或者,也许我看错了方向。预先感谢您的帮助。
罗尔