Python Lambda函数
这里有个函数,谁能解释一下这里发生了什么? 我知道函数体中发生了什么,但不知道lambda函数是如何工作的 我不熟悉lambda函数,因此我不确定该函数返回的方式或内容。t和c到底是什么Python Lambda函数,python,function,lambda,Python,Function,Lambda,这里有个函数,谁能解释一下这里发生了什么? 我知道函数体中发生了什么,但不知道lambda函数是如何工作的 我不熟悉lambda函数,因此我不确定该函数返回的方式或内容。t和c到底是什么 def get_梯度(self、A、b、x、beta): 返回值(λt,c:(2*self.lambda_*x-A.t@(b*t)/c,和(-b*t)/c))(1/(1+np.exp(b)*(A@x+beta))),A.shape[0] A是矩阵,b和x是列向量,beta和lambda是标量,这里,get\u
def get_梯度(self、A、b、x、beta):
返回值(λt,c:(2*self.lambda_*x-A.t@(b*t)/c,和(-b*t)/c))(1/(1+np.exp(b)*(A@x+beta))),A.shape[0]
A是矩阵,b和x是列向量,beta和lambda是标量,这里,get\u gradient(self,A,b,x,beta)
返回一个函数。换句话说,它是一个定义另一个函数并将其作为输出返回的函数。如果您想根据不同类型的参数定义多个函数,它很有用
我将向您介绍有关lambda
函数及其典型用途的更多信息
但在您的情况下,一个更简单的示例可能会帮助您了解发生了什么!假设您有:
def f(a):
return lambda x: x**a
这里,f返回一个函数,该函数将a的幂应用于其输入
一旦你有了这个,你可以做:
g = f(2)
其结果与您所做的基本相同:
def g(x):
return x**2
无论哪种情况,您现在都可以执行以下操作:
g(5)
# > 25
看起来您缺少了最后一个结束括号,所以我认为应该是:
def get_gradient(self, A, b, x, beta):
return (lambda t,c: (2*self.lambda_*x - A.T@(b*t)/c, sum(-b*t)/c))(1/(1+np.exp(b*(A@x+beta))), A.shape[0])
这与执行以下操作相同:
def get_gradient(self, A, b, x, beta):
def fn(t, c):
return (2*self.lambda_*x - A.T@(b*t)/c, sum(-b*t)/c))
return fn(1/(1+np.exp(b*(A@x+beta))), A.shape[0])
这与:
def get_gradient(self, A, b, x, beta):
t = 1/(1+np.exp(b*(A@x+beta)))
c = A.shape[0]
return (2*self.lambda_*x - A.T@(b*t)/c, sum(-b*t)/c))
在我的例子中,t和c到底是什么?@SharhadBashar,它们只是传递到正在返回的函数中的参数。就像这里的示例中的
x
。确实如此。正如@Chris所说,t
和c
是第一个函数get\u()将返回的函数的参数
。换句话说,一旦您使用了由get\u gradient()
返回的函数,它们将被使用并需要指定。好的,我想我现在理解了t=1/(1+np.exp(b*(A@x+beta))c=A.shape[0]lambda表达式只是创建函数的表达式。lambda函数与def
语句创建的函数没有区别。