Multivariate lambda function in Python that scales with number of input variables received

守給你的承諾、 提交于 2021-01-28 11:26:35

问题


The following toy function ordinarily takes two input variables:

f = lambda u1, u2 : (u1*u2)*(u1**2+u2**2)

but can scale beyond the bivariate case to higher dimensions:

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)

How can the lambda function be written so that it can expand itself in the call lambda u1, u2, u3, u4, ... as well as the function body itself, based on number of inputs sent to it, similar to how a defined function can be declared as def f(*args) where *args is an arbitrary number of input arguments?


回答1:


The lambda syntax supports the same parameter list syntax as the def syntax, including variadic positional and keyword argument.

f = lambda *us: math.prod(us) * sum(u**2 for u in us)

If the *us are not invariant when multiplied by 1 or added to 0, the * and + operations can be applied across elements via reduce:

from functools import reduce
import operator

f = lambda *us: reduce(operator.mul, us) * reduce(operator.add, (u**2 for u in us))


来源:https://stackoverflow.com/questions/65688402/multivariate-lambda-function-in-python-that-scales-with-number-of-input-variable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!