numpy中的分段函数具有多个参数

时间:2018-11-24 01:22:15

标签: python numpy

我试图定义一个函数(帐篷图),如下所示:

def f(r, x):
    return np.piecewise([r, x], [x < 0.5, x >= 0.5], [lambda r, x: 2*r*x, lambda r, x: 2*r*(1-x)])

r,x将是numpy数组:

no_r = 10001
r = np.linspace(0, 4, no_r)
x = np.random.rand(no_r)

我希望结果是一个匹配r和x形状的numpy数组,该数组使用具有相同标记的数组r和x的每对元素进行计算。例如,如果r = [0,1,2,3]和x = [0.1,0.7,0.3,1],则结果应为[0,0.6,1.2,0]。 发生错误:“布尔索引与沿维度0的索引数组不匹配;维度为2,但相应的布尔维度为10001” 那么我应该怎么做才能达到预期的目的?

1 个答案:

答案 0 :(得分:4)

您想要得到的结果可以通过np.select完成,例如:

def f(r, x):
    return np.select([x < 0.5,x >= 0.5], [2*r*x, 2*r*(1-x)])

然后与

r = np.array([0, 1, 2, 3])
x = np.array([0.1, 0.7, 0.3, 1])

print (f(r,x))
[0.  0.6 1.2 0. ]

编辑:在这种情况下,只有两个排他条件,您还可以使用np.where

def f(r,x):
    return np.where(x<0.5,2*r*x, 2*r*(1-x))

将给出相同的结果。