我正在尝试在Python中实现分段函数。由于我使用了numpy中的一些工具,我只需从中导入所有内容(即from numpy import *
)。我的分段函数定义为
LinQuad = piecewise( t, [t < 1, t >= 1], [lambda t : t, lambda t : t**2] )
导致错误NameError: global name 't' is not defined
。我不明白为什么我应该定义t
- 毕竟,没有必要为简单的lambda函数t
定义Lin = lambda t : t
。在某些示例中,定义了t
的域,但我不知道将评估函数LinQuad
的值。怎么办?
答案 0 :(得分:2)
我不是一个笨拙的专家,但它看起来像你期待分段返回一个你可以在其他地方使用的功能。这不是它的作用 - 它计算功能结果本身。您可以编写一个lambda表达式,该表达式将采用任意域并返回您的计算:
LinQuad = lambda x: piecewise(x, [x < 1, x >= 1], [lambda t: t, lambda t: t**2])
我不太确定在那里定义condlist布尔数组 - 可能是numpy特有的。
或者如果适合您的情况:
def LinQuad(x):
return piecewise(x, [x < 1, x >= 1], [lambda t: t, lambda t: t**2])
答案 1 :(得分:1)
np.piecewise
要求您在调用时定义输入域:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.piecewise.html
你无法真正了解如何指定方法。虽然您可以使用lambda函数,但np.piecewise
不会生成可以应用于任意域的方法。