首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在numpy.piecewise中指定范围(每个范围2个条件)

如何在numpy.piecewise中指定范围(每个范围2个条件)
EN

Stack Overflow用户
提问于 2013-09-24 03:20:31
回答 2查看 3.7K关注 0票数 8

我试图为一些数字信号处理构建一个分段函数,但我不能让numpy.piecewise允许我指定一个范围。

以下是我要输入的内容:

代码语言:javascript
复制
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

但在我看来,允许指定一个范围对于许多分段函数来说是必不可少的。有办法做到这一点吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-24 11:11:02

尼古拉斯回答的另一个问题是,如果要使用funclist,则必须调用piecewise的每个元素。修正后的代码看起来就像

代码语言:javascript
复制
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

代码语言:javascript
复制
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)的间隔,你可能需要这样做。

票数 4
EN

Stack Overflow用户

发布于 2013-09-24 09:56:07

这是因为不能在numpy数组上使用和使用。对于numpy布尔数组,需要将and替换为*,将or替换为+。(并且不要忘记添加括号)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18972433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档