np.piecewise处理整数数组生成错误值的原因咨询
问题原因分析
你的问题出在输入数组的数据类型以及numpy早期版本的行为上:
- 传入的
Y = np.array([0,2])是整数型数组,而X = np.array([0,2.1])是浮点型数组。 - 在部分旧版本numpy中,
np.piecewise会根据输入数组的类型确定返回数组的类型。如果输入是整数数组,即使函数计算结果是浮点数,也会被强制截断为整数(比如0.4207被转为0,-0.4207也被转为0)。 - 浮点型数组作为输入时,返回结果会保留浮点精度,因此
A的结果符合预期。
解决方法
你可以通过以下两种方式修复:
- 显式将整数数组转为浮点型:
Y = np.array([0,2], dtype=np.float64) B = function(Y)
- 修改函数中的计算逻辑,确保结果为浮点数(比如把
1/2改为0.5):
def function(x): return np.piecewise(x, [x <= 1, x > 1], [lambda x: 0.5*np.sin((x-1)**2), lambda x:-0.5*np.sin((x-1)**2)])
调整后,无论输入是整数还是浮点数组,都会返回浮点型结果,得到你预期的array([0.42073549, -0.42073549])。
内容的提问来源于stack exchange,提问作者harkins 2011
相关产品推荐
相关产品推荐

