我有一个函数,可以根据我的数据计算特征。 这是它的虚拟样本
import numpy as np
val1=[1,2,3,4,5,6,7,8,9]
val2=[2,4,6,8,10,12,14,16]
data=[]
def feature_cal(val):
val=np.array(val)
value=val*2
data.append(np.mean(value))
feature_cal(val1)
feature_cal(val2)
我要在函数feature_cal中定义函数np.mean()。
伪代码
def feature_cal(val,method):
val=np.array(val)
value=val*2
data.append(method(value))
feature_cal(val1,method=np.mean())
feature_cal(val2,method=np.mean())
这将帮助我在不更改原始功能的情况下计算其他功能,例如np.std(),np.var()
答案 0 :(得分:3)
要传递该功能,您需要删除np.mean
之后的括号:
import numpy as np
def feature_cal(val, method):
val = np.array(val)
value = val*2
data.append(method(value))
feature_cal(val1, method=np.mean)
feature_cal(val2, method=np.mean)
如果您需要将参数传递给np.mean
,则可以使用functools.partial
:
import numpy as np
import functools
def feature_cal(val, method):
val = np.array(val)
value = val*2
data.append(method(value))
bound_function = functools.partial(np.mean, axis=1)
feature_cal(val1, method=bound_function)
feature_cal(val2, method=bound_function)
答案 1 :(得分:0)
如果我正确地理解了您,则您需要传递可调用的函数,而不是像现在那样传递函数调用的结果。所以这行
feature_cal(val1,method=np.mean())
应该阅读
feature_cal(val1,method=np.mean)
答案 2 :(得分:0)
您只需输入方法的名称(不带括号)并读取要调用的函数(带括号),就可以简单地将方法作为参数插入函数中
def feature_cal(val,method):
val=np.array(val)
value=val*2
data.append(method(value))
feature_cal(val1,method=np.mean)