1

我正在尝试在 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——毕竟,没有必要t为一个简单的 lambda 函数定义Lin = lambda t : t。在某些示例中,t定义了域,但我不知道函数LinQuad将在哪些值上进行评估。该怎么办?

4

2 回答 2

3

我不是 numpy 专家,但在我看来,您希望分段返回一个函数,然后您可以在其他地方使用该函数。那不是它所做的——它自己计算函数结果。您可能可以编写一个 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])
于 2013-05-15T21:45:28.150 回答
1

np.piecewise要求您在调用时定义输入域:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.piecewise.html

您无法真正解决方法的指定方式。虽然您可以使用 lambda 函数,np.piecewise但不会生成可以应用于任意域的方法。

于 2013-05-15T21:11:31.583 回答