gpt4 book ai didi

python - 函数是任意许多其他函数的总和

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:15 24 4
gpt4 key购买 nike

我正在尝试用 Python 为多项式 p 编写一个函数,它是 n 个基函数 phi_i 的线性组合。我如何定义一个本身就是 n 个其他函数之和的函数?

我知道这行得通:

phi1 = lambda x: x**2
phi2 = lambda x: x
p = lambda x: phi1(x) + phi2(x)

但是如果我尝试这样的循环:

p = lambda x: 0
for i in range(0,n):
p = lambda x: p(x)+phi[i](x)

phi 是我的基函数列表,我创建了一个无限循环。


我检查了Writing a function that is sum of functions ,但不幸的是,这不是在 Python 中。

最佳答案

您可以通过将一个简单的生成器表达式传递给 sum 来完成此操作:

def sigma(funcs, x):
return sum(f(x) for f in funcs)

phi = [lambda x: x**2, lambda x: x]
y = sigma(phi, x)

顺便说一句,使用 lambda 被认为是不好的风格对于命名函数,它应该用于匿名函数。


如果你想要一个不需要 phi 的函数每次调用它时都要传递,有几种方法可以做到这一点。最简单的方法是简单地使用 phi在函数中。例如,

def sigma(x):
return sum(f(x) for f in phi)

但是,这也有一些缺点。如果 phi 将不起作用不在您调用 sigma 的范围内;你可以通过制作 phi 来解决这个问题全局,但这可能不方便,最好在不需要时避免使用全局变量。另一个缺点是它使用了 phi 的当前内容。 ,而不是它在 sigma 时的内容已定义,因此如果您修改 phi 的内容这些更改将反射(reflect)在 sigma 中,这可能是可取的,也可能不是可取的。

另一种选择是使用 closure创建函数。这样我们就不会受到范围问题的影响:您可以在原始函数列表不可见的范围内调用生成的求和函数。我们还可以创建函数列表的副本,这样它就不会受到传入函数列表更改的影响。

def make_adder(funcs):
# Copy the function list
funcs = funcs[:]
def sigma(x):
return sum(f(x) for f in funcs)
return sigma

phi = [lambda x: x**2, lambda x: x]
sigma = make_adder(phi)
y = sigma(x)

还有一个选择是使用我原来的 sigma并传递它和 phi功能 functools.partial , 例如

from functools import partial
sig = partial(sigma, phi)
y = sig(x)

关于python - 函数是任意许多其他函数的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42371268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com