繁体   English   中英

Python - 矢量化函数的参数声明

[英]Python - Parameter declaration for vectorized functions

我目前正在开发一个 Python 框架,用于训练具有应用于训练数据的不同噪声函数的 ML 模型。 这是这个噪声函数的一个例子。

def add_gauss(x, a=0, b=0.1)
   return x + np.random.normal(a,b)

然后我建立一个包含几个这样的函数的列表

functions = [add_gauss, add_laplace]

然后将其用于训练函数,进行矢量化并应用于训练数据:

data = [1, 2, 3, 4]
modified_data_list = []

for function in functions:
   v_function = numpy.vectorize(function)
   modified_data_list.append(v_function(data))

在这种情况下,这会产生一个列表,其中包含两个数据集,一个具有高斯噪声,一个具有拉普拉斯噪声。 我当前的问题:此设置仅有效,因为我为我制作的函数提供了默认参数。 我不确定是否有办法声明它们,以便我得到类似的东西:

functions = [add_gauss(*, 0, 0.1), add_laplace(*, 0, 0.1)]

其中“*”表示每个数据条目的值,因为它被矢量化函数修改。

这是可能的还是我应该改变方法?

一种可能性是编写一个返回函数的函数:

def add_gauss_func(a, b):
   def f(x)
       return x + np.random.normal(a,b)
   return f

如果您有兴趣了解更多信息,这将使用一个称为“闭包”的概念。

现在你可以做

functions = [add_gauss(0, 0.1), add_gauss(0, 0.2)]

对于具有不同高斯噪声的两个不同函数。

类似的技术可以用于拉普拉斯噪声函数。

实际上,如果您想真正花哨的话,这可能可以推广到def add_noise(f, *params)或类似的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM