我是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;在函数中使用的将是标量值,而不是列表或数组或复杂的东西。
有谁知道如何解决我的问题?
答案 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])
给出了你提到的错误。