我试图为一些数字信号处理构建一个分段函数,但我不能让numpy.piecewise允许我指定一个范围。
以下是我要输入的内容:
t = np.arange(-10,10,1)
x = lambda x: x**3
fx = np.piecewise(t, [t < -1 and t>-2, t <= 0 and t>-1, t>=0 and t<1,t>1 and t<2], [x(t + 2), x(-t),x(t),-x(2-t)])
plot(t,fx)但是,我得到了一个错误:"ValueError:包含多个元素的数组的真值是不明确的。
在对该函数进行剖析之后,问题似乎是该函数不允许在一个条件中包含两个条件,例如:t < -1 and t>-2
但在我看来,允许指定一个范围对于许多分段函数来说是必不可少的。有办法做到这一点吗?
谢谢!
发布于 2013-09-24 11:11:02
尼古拉斯回答的另一个问题是,如果要使用funclist,则必须调用piecewise的每个元素。修正后的代码看起来就像
t = np.arange(-2,2,.01)
f1 = lambda t: (t+2)**3
f2 = lambda t: (-t)**3
f3 = lambda t: (t)**3
f4 = lambda t: -(2-t)**3
fx = np.piecewise(t, [(t< -1)*(t>=-2), (t <= 0) * (t>=-1), (t>0) * (t<1),(t>=1) * (t<=2)], [f1,f2,f3,f4])
plot(t,fx)相反,您可以使用select
t = np.arange(-2,2,.01)
f = lambda x: x**3
fx = np.select([(t< -1)*(t>=-2), (t <= 0) * (t>=-1), (t>0) * (t<1),(t>=1) * (t<=2)], [f(t+2),f(-t),f(t),-f(2-t)])
plot(t,fx)此外,select允许在定义的间隔之外设置默认值,方法是将其传递给参数default。如果你想保持区间(-10,10)的间隔,你可能需要这样做。
发布于 2013-09-24 09:56:07
这是因为不能在numpy数组上使用和使用。对于numpy布尔数组,需要将and替换为*,将or替换为+。(并且不要忘记添加括号)。
https://stackoverflow.com/questions/18972433
复制相似问题