首页 > 解决方案 > 如何使用来自另一个数组的值迭代地定义函数

问题描述

假设我有一个系数列表:coeff = [0, 1, 2]并且我希望迭代地定义 3 个依赖于要获得的系数的函数:phi = [lambda x: coeff[0]*(x-0), lambda x: coeff[1]*(x-1), lambda x: coeff[2]*(x-2)]

我试过的代码是:

for i in range(3):
    phi.append(lambda x, i=i: coeff[i] * (x - i))

但我得到一个错误TypeError: only size-1 arrays can be converted to Python scalars

我认为问题是我coeff[i]lambda函数中引用的,但我不完全理解问题并且不知道如何解决。谢谢。

编辑:我认为上面是我实际程序的简化示例:

l = 3
coeff = []
phi = []
hat = []
curve = lambda x: sin(x*pi)*x**2

nodes = linspace(0, 1, 2**l+1, endpoint = True)

for n in nodes:
    coeff.append(curve(n))

for i in range(len(nodes)):
    phi.append(lambda x, i=i: coeff[i] * max(1 - abs(2**l * x - i), 0))

编辑2:当我调用phi中的函数时,我意识到问题出在其他地方!我认为问题出coeff[1]lambda函数中 - 阻止转换为 Python 标量。有没有办法可以在函数中使用,而不是拥有?coeff[i]lambdacoeff[i]

for p in phi:
    hat.append(ax.get_graph(p, x_range=[0, 1], color=MAROON_C))

TypeError:只有大小为 1 的数组可以转换为 Python 标量

编辑3:问题出在其他地方-可以关闭此线程。感谢大家的帮助。

标签: pythonfunctionloopsindexinglambda

解决方案


考虑一下:

coeff = [0, 1, 2]
phi   = []
for i, c in enumerate(coeff):
  f = lambda x:  coeff[i] * (x-i)
  phi.append(f)

您现在在 中具有三个功能phi

  • f0 = coeff[0] * (x-0)
  • f1 = coeff[1] * (x-1)
  • f2 = coeff[2] * (x-2)

那是你想要完成的吗?


推荐阅读