2013-05-15 36 views
1

我试图在Python中实现分段函数。由于我使用了numpy的一些工具,我只需从它导入所有东西(即from numpy import *)。我的分段函数定义为Python - numpy的分段函数困惑

LinQuad = piecewise(t, [t < 1, t >= 1], [lambda t : t, lambda t : t**2]) 

这导致错误NameError: global name 't' is not defined。我不明白为什么我应该定义t - 毕竟,没有必要为简单的lambda函数Lin = lambda t : t定义t。在某些示例中,定义了t的域,但我不知道函数LinQuad将在哪些值进行评估。该怎么办?

+0

_ “这是没有必要将t定义为简单的lambda函数'林=拉姆达T:t'” _ - 这是因为'拉姆达T:'是在表达式 – Eric

回答

2

我不是专家,但它看起来像你期待分段返回一个函数,然后可以在其他地方使用。这不是它所做的 - 它会自行计算函数结果。你也许可以写,将采取在任意域和IT投资回报的计算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

np.piecewise要求你你怎么称呼它的时候定义输入域:

​​

如何规定的方法是你不能真正得到解决。虽然您可以使用lambda函数,但np.piecewise不会生成可应用于任意域的方法。

+0

的范围内定义了't'的Python语言结构谢谢。知道'LinQuad'会被评估为'0'和'4'之间的某些值吗?或者我必须知道'LinQuad'将被评估的确切值?换句话说,我如何定义输入域? – Ailurus