Python-被numpy的分段函数搞混了

2024-06-12 05:47:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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函数定义Lin = lambda t : t。在一些例子中,定义了t的域,但我不知道函数LinQuad将在哪个值上求值。怎么办?


Tags: 工具lambda函数namefromimportnumpy内容
2条回答

我不是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])

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

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

你真的不能回避如何指定方法。虽然可以使用lambda函数,但np.piecewise不会生成可随后应用于任意域的方法。

相关问题 更多 >