Python 使用lambda时,numpy.pieclewise返回不正确的答案

Python 使用lambda时,numpy.pieclewise返回不正确的答案,python,numpy,lambda,Python,Numpy,Lambda,我试图通过使用numpy将常量部分插入函数来“拼接”函数。分段: import numpy as np func = lambda x: 20 -x bid_price = 15.0 bid_power = 1.0 bid_start = 5.0 new_func = lambda x: np.piecewise(x, [0 <= x < bid_start, (x>= bid_start) & (x < bid_start + b

我试图通过使用numpy将常量部分插入函数来“拼接”函数。分段:

import numpy as np

func = lambda x: 20 -x
bid_price = 15.0
bid_power = 1.0
bid_start = 5.0

new_func = lambda x: np.piecewise(x, [0 <= x < bid_start,
              (x>= bid_start) & (x < bid_start + bid_power),  x >= bid_start + bid_power],
              [lambda t: func(t), lambda t : bid_price,
               lambda t: func(t - bid_power)])

我浏览了numpy的代码。分段(不能完全调试),但似乎没有任何原因导致这种行为。将x强制转换为numpy.array没有帮助。我在这里做错了什么?

好吧,如果你输入一个非标量的
np.array

>>> new_func(np.array([15]))
array([6])

稍微修改一下
(0好吧,如果您输入一个非标量
np.array

>>> new_func(np.array([15]))
array([6])

稍微修改一下
(0你是对的,在我的情况下大约快60倍。我将切换到显式条件检查。你是对的,在我的情况下大约快60倍。我将切换到显式条件检查。
>>> new_func(np.arange(20))
array([20, 19, 18, 17, 16, 15, 15, 14, 13, 12, 11, 10,  9,  8,  7,  6,  5, 4,  3,  2])
def new_func(x):
    if x < 0:
        raise ValueError()
    elif x < bid_start:
        return 20 - x
    elif x < bid_start + bid_power:
        return bid_price
    else:
        return 20 - x + bid_power