gpt4 book ai didi

python - scipy Hermite 多项式列表用作 lambda 函数时会出现意外行为

转载 作者:太空宇宙 更新时间:2023-11-03 20:57:50 28 4
gpt4 key购买 nike

我想构建一个 Hermite polynomials 的容器(链接到 scipy 的 Hermite 文档)不同的命令。根据文档所说,我期望 scipy.special.hermite 接受顺序 n 并返回一个函数 - 顺序为 n 的 Hermite 多项式.

这似乎适用于单一功能。但是当我尝试通过将 Hermitte 多项式实现为 lambda 函数来使用它们时,它们似乎都会被重置为最后一个多项式:

from scipy.special import hermite
base_funcs = [lambda x: hermite(i)(x) for i in range(5)]

[f(1) for f in base_funcs]
Out[40]: [-20.0, -20.0, -20.0, -20.0, -20.0]
hermite(0)(1)
Out[41]: 1.0
hermite(4)(1)
Out[42]: -20.0

是否有一种方法可以正确启动不同 Hermite 多项式的容器,而不会使容器理解语句中的后续元素覆盖先前的元素?谢谢!

最佳答案

正如 Warren 的评论所说,这是由于 Python 的后期绑定(bind)机制造成的。为了规避它,一种解决方案是将循环变量作为函数的默认参数之一。即

[lambda x, i=i: hermite(i)(x) for i in range(5)]

建议阅读:https://docs.python-guide.org/writing/gotchas/#late-binding-closures

关于python - scipy Hermite 多项式列表用作 lambda 函数时会出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55900595/

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