np.piecewise不适用于三个条件

时间:2016-05-22 08:44:18

标签: python numpy piecewise

我是python的新手,需要定义一个分段函数,但是,只要我指定了两个以上的条件,我就会遇到" ValueError:函数列表和条件列表必须相同" 。

例如,非常基本的测试功能

def test(r):
    r1=1.8
    return np.piecewise(r, [(r<r1), (r==r1), (r>r1)], [0, 1, 2])

产生此错误,而只有两个条件的函数

def test(r):
    r1=1.8
    return np.piecewise(r, [(r<r1), (r>r1)], [0, 2])

完美无瑕。我通过使用np.select来规避我的问题,然而,我很好奇我的错误是什么以及如何解决它。我不确定这是否有兴趣,但变量&#34; r&#34;在函数中使用的将是标量值,而不是列表或数组或复杂的东西。

有谁知道如何解决我的问题?

1 个答案:

答案 0 :(得分:3)

您正在将一个列表传递给该函数,但是您应该传递一个numpy数组:

r1 = 1.8
r = numpy.arange(0, 3, 0.2)
print numpy.piecewise(r, [(r<r1), (r==r1), (r>r1)], [0, 1, 2])
# prints:
# array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  2.,  2.,  2., 2.,  2.])

但添加

r = list(r)
print numpy.piecewise(r, [(r<r1), (r==r1), (r>r1)], [0, 1, 2])

给出了你提到的错误。