Python中的多变量lambda函数,可根据接收的输入变量数量进行缩放
以下玩具函数通常采用两个输入变量:Python中的多变量lambda函数,可根据接收的输入变量数量进行缩放,python,function,lambda,dimensions,Python,Function,Lambda,Dimensions,以下玩具函数通常采用两个输入变量: f = lambda u1, u2 : (u1*u2)*(u1**2+u2**2) 但可以超越双变量情况扩展到更高的维度: if dim == 2: f = lambda u1, u2 : (u1*u2)*(u1**2+u2**2) if dim == 3: f = lambda u1, u2, u3 : (u1*u2*u3)*(u1**2+u2**2+u3**2) if dim == 4: f = lambda u1, u2, u3
f = lambda u1, u2 : (u1*u2)*(u1**2+u2**2)
但可以超越双变量情况扩展到更高的维度:
if dim == 2:
f = lambda u1, u2 : (u1*u2)*(u1**2+u2**2)
if dim == 3:
f = lambda u1, u2, u3 : (u1*u2*u3)*(u1**2+u2**2+u3**2)
if dim == 4:
f = lambda u1, u2, u3, u4 : (u1*u2*u3*u4)*(u1**2+u2**2+u3**2+u4**2)
如何编写lambda函数,使其能够在调用lambda u1、u2、u3、u4、
以及函数体本身,基于发送给它的输入数量,类似于定义的函数可以声明为def(*args)
,其中*args
是任意数量的输入参数?支持与相同的参数列表语法,包括可变位置参数和关键字参数
f=lambda*us:math.prod(us)*总和(u**2表示u在美国)
如果*us
在乘以1
或添加到0
时不是不变的,*
和+
操作可以通过以下方式跨元素应用:
从functools导入reduce
进口经营者
f=λ*us:reduce(operator.mul,us)*reduce(operator.add,(u**2表示u在us中))
支持与相同的参数列表语法,包括可变位置参数和关键字参数
f=lambda*us:math.prod(us)*总和(u**2表示u在美国)
如果*us
在乘以1
或添加到0
时不是不变的,*
和+
操作可以通过以下方式跨元素应用:
从functools导入reduce
进口经营者
f=λ*us:reduce(operator.mul,us)*reduce(operator.add,(u**2表示u在us中))
你的意思是lambda*args:…
?既然您似乎已经知道这是如何处理def
函数文本的,那么为什么要使用lambda
呢?您看过了吗?ok调用lambda*args:
很有意义,但是,如果函数体遵循如图所示的数学结构,函数体如何也能随着参数的数量进行缩放?您的公式是项除以平方和的乘积。你不能把它编码成一个函数吗?你是说lambda*args:…
?既然您似乎已经知道这是如何处理def
函数文本的,那么为什么要使用lambda
呢?您看过了吗?ok调用lambda*args:
很有意义,但是,如果函数体遵循如图所示的数学结构,函数体如何也能随着参数的数量进行缩放?您的公式是项除以平方和的乘积。你不能把它编码成一个函数吗?为什么sum
包含一个for循环,而math.prod
没有?使用numpy.prod
和numpy.sum
,这会发生变化吗?因为乘积中的每个元素都是按原样取的,而求和中的每个元素都需要平方。请注意,u**2表示u在us中
在总和(…)内
是一个生成器表达式,它生成一个iterable–对它们的参数进行内部迭代sum
和prod
。可以同时使用numpy
吗instead@develarist我已经添加了一个版本,该版本应该适用于与问题中显示的函数一起工作的任何类型。例如,这包括numpy.array
。抱歉并不是要增加更多工作,只是好奇而已。我已经转到另一个步骤,谢谢:为什么sum
包含for循环,而math.prod
没有?使用numpy.prod
和numpy.sum
,这会发生变化吗?因为乘积中的每个元素都是按原样取的,而求和中的每个元素都需要平方。请注意,u**2表示u在us中
在总和(…)内
是一个生成器表达式,它生成一个iterable–对它们的参数进行内部迭代sum
和prod
。可以同时使用numpy
吗instead@develarist我已经添加了一个版本,该版本应该适用于与问题中显示的函数一起工作的任何类型。例如,这包括numpy.array
。抱歉并不是要增加更多工作,只是好奇而已。我已进入另一个步骤,谢谢: