该函数具有以下数学形式
f(x) = 1, if x<1
= g(x), for 1<=x<10
= 0, for x >=10
其中
g(x)
是一个简单函数。
如果输入是使用
float
的 if/else
,那么编写这样的函数很简单。如果输入是 numpy 数组,是否有一个简洁/高效的实现而无需显式循环?
numpy.piecewise
:
x = np.linspace(0, 20, 30)
g = lambda x: -x
y = np.piecewise(x, [x<1, (1<=x)&(x<10), x>=10],
[lambda x: 1, g, lambda x: 0])
输出:
array([ 1. , 1. , -1.37931034, -2.06896552, -2.75862069,
-3.44827586, -4.13793103, -4.82758621, -5.51724138, -6.20689655,
-6.89655172, -7.5862069 , -8.27586207, -8.96551724, -9.65517241,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ])