python - 如何使用来自另一个数组的值迭代地定义函数
问题描述
假设我有一个系数列表: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]
lambda
coeff[i]
for p in phi:
hat.append(ax.get_graph(p, x_range=[0, 1], color=MAROON_C))
TypeError:只有大小为 1 的数组可以转换为 Python 标量
编辑3:问题出在其他地方-可以关闭此线程。感谢大家的帮助。
解决方案
考虑一下:
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)
那是你想要完成的吗?
推荐阅读
- android - 检测何时使用 React native 截取新屏幕截图,expo for android
- r - R中的聚类时间序列-K均值准确吗?
- javascript - JavaScript - 检查条件是否保持 5 秒
- java - 有人可以向我解释一下这个递归背后的逻辑吗
- algorithm - 自顶向下动态规划算法的运行时间
- javascript - 在 Mac OS X 上从 swagger.json 文件生成 Typescript
- node.js - 错误 413 请求实体太大 docker 节点
- mysql - cloudshell 和 google sql 遇到问题
- python - 停止函数更改原始列表
- javascript - 变量更改时不执行 BehaviorSubject