Python - 被numpy的分段函数搞糊涂了

时间:2013-05-15 21:05:19

标签: python numpy lambda piecewise

我正在尝试在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的值。怎么办?

2 个答案:

答案 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不会生成可以应用于任意域的方法。